I just search around before asking this problem, looking for example of TCP Server and Client in C#.
I found this link, I just used the given code by the link but unfortunately there's a problem and I'm stuck!
The following code is the complete code for server (console):
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net.Sockets; namespace TCP_Server_Console { class Program { static void Main(string[] args) { TcpListener serverSocket = new TcpListener(8888); int requestCount = 0; TcpClient clientSocket = default(TcpClient); serverSocket.Start(); Console.WriteLine(" >> Server Started"); clientSocket = serverSocket.AcceptTcpClient(); Console.WriteLine(" >> Accept connection from client"); requestCount = 0; while ((true)) { try { requestCount = requestCount + 1; NetworkStream networkStream = clientSocket.GetStream(); byte[] bytesFrom = new byte[10025]; networkStream.Read(bytesFrom, 0, (int)clientSocket.ReceiveBufferSize); string dataFromClient = System.Text.Encoding.ASCII.GetString(bytesFrom); dataFromClient = dataFromClient.Substring(0, dataFromClient.IndexOf("$")); Console.WriteLine(" >> Data from client - " + dataFromClient); string serverResponse = "Last Message from client" + dataFromClient; Byte[] sendBytes = Encoding.ASCII.GetBytes(serverResponse); networkStream.Write(sendBytes, 0, sendBytes.Length); networkStream.Flush(); Console.WriteLine(" >> " + serverResponse); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } } clientSocket.Close(); serverSocket.Stop(); Console.WriteLine(" >> exit"); Console.ReadLine(); } } } /*HandleClient Class */ using System; using System.Collections.Generic; using System.Linq; using System.Net.Sockets; using System.Text; using System.Threading; using System.Threading.Tasks; namespace TCP_Server_Console { public class HandleClient { TcpClient clientSocket; string clNo; public void startClient(TcpClient inClientSocket, string clineNo) { this.clientSocket = inClientSocket; this.clNo = clineNo; Thread ctThread = new Thread(doChat); ctThread.Start(); } private void doChat() { int requestCount = 0; byte[] bytesFrom = new byte[10025]; string dataFromClient = null; Byte[] sendBytes = null; string serverResponse = null; string rCount = null; requestCount = 0; while ((true)) { try { requestCount = requestCount + 1; NetworkStream networkStream = clientSocket.GetStream(); networkStream.Read(bytesFrom, 0, (int)clientSocket.ReceiveBufferSize); dataFromClient = System.Text.Encoding.ASCII.GetString(bytesFrom); dataFromClient = dataFromClient.Substring(0, dataFromClient.IndexOf("$")); Console.WriteLine(" >> " + "From client-" + clNo + dataFromClient); rCount = Convert.ToString(requestCount); serverResponse = "Server to clinet(" + clNo + ") " + rCount; sendBytes = Encoding.ASCII.GetBytes(serverResponse); networkStream.Write(sendBytes, 0, sendBytes.Length); networkStream.Flush(); Console.WriteLine(" >> " + serverResponse); } catch (Exception ex) { Console.WriteLine(" >> " + ex.ToString()); } } } } } The following code is the complete code for client (Windows Forms):
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Net.Sockets; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace TCP_Client_Sample { public partial class Form1 : Form { System.Net.Sockets.TcpClient clientSocket = new System.Net.Sockets.TcpClient(); NetworkStream serverStream; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { label_status.Text = "Client Started, Connecting..."; try { clientSocket.Connect("127.0.0.1", 8888); if (clientSocket.Connected) { label_status.Text = "Connected"; label_status.ForeColor = Color.Green; } } catch (Exception xe) { MessageBox.Show("OOPS!!! SERVER MUST BE STARTED FIRST! \n\n" + xe.ToString()); } } //Function to Send Message to Server (On Button Click) private void btn_send_Click(object sender, EventArgs e) { try { NetworkStream serverStream = clientSocket.GetStream(); byte[] outStream = System.Text.Encoding.ASCII.GetBytes("Message From Client$"); serverStream.Write(outStream, 0, outStream.Length); serverStream.Flush(); byte[] inStream = new byte[10025]; serverStream.Read(inStream, 0, (int)clientSocket.ReceiveBufferSize); string returnData = System.Text.Encoding.ASCII.GetString(inStream); chatBox.AppendText(">> Server: " + returnData); } catch (Exception ex) { MessageBox.Show("Unable to Send Data: " + ex); } } } } Every time I execute the code of server it works and started. But when I execute the client, the server throws an error
Specified Argument was out of the range
Here is the complete error:
System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values.
Parameter name: size
at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
at TCP_Server_Console.Program.Main(String[] args) in C:\Users\user\Documents\Visual Studio 2015\Projects\TCP_Server_Console\TCP_Server_Console\Program.cs:line 50
I'm also getting the same error every time I click the btn_send from client form.
I am stuck here and I don't know what's the problem since this is the first time I'm work with TCP Socket.
Can anynone help me?