I have a homework to build an application which will send and receive simple string between server and client. I know how to establish connection, but don't know how to send and receive string. This is my code :
public partial class Form1 : Form { private Thread n_server; private Thread n_client; private Thread n_send_server; private TcpClient client; private TcpListener listener; private int port = 2222; private string IP = " "; private Socket socket; public Form1() { InitializeComponent(); } private void exitToolStripMenuItem_Click(object sender, EventArgs e) { Application.Exit(); } public void Server() { listener = new TcpListener(IPAddress.Any, port); listener.Start(); try { socket = listener.AcceptSocket(); if (socket.Connected) { textBox2.Invoke((MethodInvoker)delegate { textBox2.Text = "Client : " + socket.RemoteEndPoint.ToString(); }); } } catch { } } public void Client() { IP = "localhost"; client = new TcpClient(); try { client.Connect(IP, port); } catch (Exception ex) { MessageBox.Show("Error : " + ex.Message); } if (client.Connected) { textBox3.Invoke((MethodInvoker)delegate { textBox3.Text = "Connected..."; }); } } private void button1_Click(object sender, EventArgs e) { n_server = new Thread(new ThreadStart(Server)); n_server.IsBackground = true; n_server.Start(); textBox1.Text = "Server up"; } private void button2_Click(object sender, EventArgs e) { n_client = new Thread(new ThreadStart(Client)); n_client.IsBackground = true; n_client.Start(); } private void send() { // I want to use this method for both buttons : "send button" on server side and "send button" // on client side. First I read text from textbox2 on server side or textbox3 // on client side than accept and write the string to label2(s) or label3(c). // } private void button3_Click(object sender, EventArgs e) { n_send_server = new Thread(new ThreadStart(send)); n_send_server.IsBackground = true; n_send_server.Start(); } }
A TCP client initiates a connection request to a TCP server in order to setup a connection with the server. A real TCP server can accept multiple connections on a socket. A server socket in the simulator accepts only one TCP connection in its lifetime.
TCP: the InterSystems IRIS Transmission Control Protocol (TCP) binding. Establishes a two-way connection between a server and a single client. Provides reliable byte stream transmission of data with error checking and correction, and message acknowledgement.
The TcpClient class provides simple methods for connecting, sending, and receiving stream data over a network in synchronous blocking mode. In order for TcpClient to connect and exchange data, a TcpListener or Socket created with the TCP ProtocolType must be listening for incoming connection requests.
Open the server management program on your Windows Server. Do this by clicking "Manage Your Server" from the start menu. Click "Add or Remove a Role." A new window will open with the configure your server wizard. Click "Next." A list of the different functions functions your server can perform is then displayed.
The following code send and recieve the current date and time from and to the server
//The following code is for the server application:
namespace Server { class Program { const int PORT_NO = 5000; const string SERVER_IP = "127.0.0.1"; static void Main(string[] args) { //---listen at the specified IP and port no.--- IPAddress localAdd = IPAddress.Parse(SERVER_IP); TcpListener listener = new TcpListener(localAdd, PORT_NO); Console.WriteLine("Listening..."); listener.Start(); //---incoming client connected--- TcpClient client = listener.AcceptTcpClient(); //---get the incoming data through a network stream--- NetworkStream nwStream = client.GetStream(); byte[] buffer = new byte[client.ReceiveBufferSize]; //---read incoming stream--- int bytesRead = nwStream.Read(buffer, 0, client.ReceiveBufferSize); //---convert the data received into a string--- string dataReceived = Encoding.ASCII.GetString(buffer, 0, bytesRead); Console.WriteLine("Received : " + dataReceived); //---write back the text to the client--- Console.WriteLine("Sending back : " + dataReceived); nwStream.Write(buffer, 0, bytesRead); client.Close(); listener.Stop(); Console.ReadLine(); } } }
//this is the code for the client
namespace Client { class Program { const int PORT_NO = 5000; const string SERVER_IP = "127.0.0.1"; static void Main(string[] args) { //---data to send to the server--- string textToSend = DateTime.Now.ToString(); //---create a TCPClient object at the IP and port no.--- TcpClient client = new TcpClient(SERVER_IP, PORT_NO); NetworkStream nwStream = client.GetStream(); byte[] bytesToSend = ASCIIEncoding.ASCII.GetBytes(textToSend); //---send the text--- Console.WriteLine("Sending : " + textToSend); nwStream.Write(bytesToSend, 0, bytesToSend.Length); //---read back the text--- byte[] bytesToRead = new byte[client.ReceiveBufferSize]; int bytesRead = nwStream.Read(bytesToRead, 0, client.ReceiveBufferSize); Console.WriteLine("Received : " + Encoding.ASCII.GetString(bytesToRead, 0, bytesRead)); Console.ReadLine(); client.Close(); } } }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With