220 likes | 355 Views
Network Programming. Advanced Computer Programming. Client/Server Application. Lecture Objective. After completing this Lecture: Students will be able to understand how Client/Server Applications are built Understanding Ports Understand how Socket Programming is done
E N D
Network Programming Advanced Computer Programming Client/Server Application
Lecture Objective • After completing this Lecture: • Students will be able to understand how Client/Server Applications are built • Understanding Ports • Understand how Socket Programming is done • Creating Console Application for showing debug messages • Sending and Receiving Message Streams using TCP Protocol
VB.NET TCP Client - Server Socket Communication • Here's a sample TCP Client and associated server "listener" to illustrate how easy socket programming has become in .NET. • We are keeping this synchronous and very basic; the idea is that a client accepts an input message, makes a connection to the listener on a specific address and port, sends the message, and retrieves the response. • The sockets are then closed. • These are console apps so you can easily see what's going back and forth, but it is trivial to compile the client code into a class library to allow multithreaded socket messaging, assuming that a listener exists that is equipped to handle the incoming requests correctly without serializing them. • Typically a server - listener of this type would listen on a single port but spin off separate sockets for each received message that comes in. • First, lets look at the code for a client:
Client Code • Imports System.Net.Sockets • Imports System.Text • Module Module1 • Sub Main() • Dim tcpClient As New System.Net.Sockets.TcpClient() • tcpClient.Connect("127.0.0.1", 8000) • Dim networkStream As NetworkStream = tcpClient.GetStream() • If networkStream.CanWrite And networkStream.CanRead Then • ' Do a simple write. • Dim sendBytes As [Byte]() = Encoding.ASCII.GetBytes("Is anybody there") • networkStream.Write(sendBytes, 0, sendBytes.Length) • ' Read the NetworkStream into a byte buffer. • Dim bytes(tcpClient.ReceiveBufferSize) As Byte • networkStream.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize)) • ' Output the data received from the host to the console. • Dim returndata As String = Encoding.ASCII.GetString(bytes) • Console.WriteLine(("Host returned: " + returndata)) • Else • If Not networkStream.CanRead Then • Console.WriteLine("cannot not read data to this stream") • tcpClient.Close() • Else • If Not networkStream.CanWrite Then • Console.WriteLine("cannot write data from this stream") • tcpClient.Close() • End If • End If • End If • ' pause so user can view the console output • Console.ReadLine() • End Sub • End Module
VB.NET TCP Client - Server Socket Communication • Here we are creating a new TcpClient, calling its Connect method, and then getting access to its underlying NetworkStream via the GetStream() method. • We Write our message into the stream (converted to a byte array first) and then Read the response from the server. • When done, we close the socket. • Now lets take a look at the server side:
Server Code • Imports System.Net.Sockets • Imports System.Text • Module Module1 • Sub Main() • ' Must listen on correct port- must be same as port client wants to connect on. • Const portNumber As Integer = 8000 • Dim tcpListener As New TcpListener(portNumber) • tcpListener.Start() • Console.WriteLine("Waiting for connection...") • Try • 'Accept the pending client connection and return an initializedTcpClient. • Dim tcpClient As TcpClient = tcpListener.AcceptTcpClient() • Console.WriteLine("Connection accepted.") • ' Get the stream • Dim networkStream As NetworkStream = tcpClient.GetStream() • ' Read the stream into a byte array • Dim bytes(tcpClient.ReceiveBufferSize) As Byte • networkStream.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize)) • ' Return the data received from the client to the console. • Dim clientdata As String = Encoding.ASCII.GetString(bytes) • Console.WriteLine(("Client sent: " + clientdata)) • Dim responseString As String = "Connected to server." • Dim sendBytes As [Byte]() = Encoding.ASCII.GetBytes(responseString) • networkStream.Write(sendBytes, 0, sendBytes.Length) • Console.WriteLine(("Message Sent /> : " + responseString)) • 'Any communication with the remote client using the TcpClient can go here. • 'Close TcpListener and TcpClient. • tcpClient.Close() • tcpListener.Stop() • Console.WriteLine("exit") • Console.ReadLine() • Catch e As Exception • Console.WriteLine(e.ToString()) • Console.ReadLine() • End Try • End Sub • End Module
VB.NET TCP Client - Server Socket Communication • As it can be seen, that the server creates a new instance of the TcpListener class on the port, and calls the Start() method. • It then calls the AcceptTcpClient() method which returns a TcpClient that you can use to send and receive data. • Use TcpClient.GetStream to obtain the underlying NetworkStream of the TcpClient. • NetworkStream inherits from Stream, which provides a rich collection of methods and properties for network communications. • We do a Read to get the sent data, and we can also call networkStream.Write() to send back a response. • That's pretty much it for sending data over TCP sockets in .NET! Its easy, simple, and very extensible. • You can download the VB.NET solution with projects for both the Client and the Server (listener) at the CMS website.
The End Questions?