具有套接字的客户端-服务器连接
本文关键字:服务器 连接 客户端 套接字 | 更新日期: 2023-09-27 18:22:15
我有一个程序,多个客户端可以使用套接字连接到服务器:
private void performConnect()
{
while (true)
{
if (myList.Pending())
{
thrd = thrd + 1;
tcpClient = myList.AcceptTcpClient();
IPEndPoint ipEndPoint = (IPEndPoint)tcpClient.Client.RemoteEndPoint;
string clientIP = ipEndPoint.Address.ToString();
nStream[thrd] = tcpClient.GetStream();
currentMsg = "'n New IP client found :" + clientIP;
recieve[thrd].Start();
this.Invoke(new rcvData(addNotification));
try
{
addToIPList(clientIP);
}
catch (InvalidOperationException exp)
{
Console.Error.WriteLine(exp.Message);
}
Thread.Sleep(1000);
}
}
}
然后服务器可以使用此代码向选定的客户端发送数据(聊天消息)。
private void sendData(String data)
{
IPAddress ipep =IPAddress.Parse(comboBox1.SelectedItem.ToString());
Socket server = new Socket(AddressFamily.InterNetwork , SocketType.Stream, ProtocolType.Tcp);
IPEndPoint ipept = new IPEndPoint( ipep, hostPort);
NetworkStream nStream = tcpClient.GetStream();
ASCIIEncoding asciidata = new ASCIIEncoding();
byte[] buffer = asciidata.GetBytes(data);
if (nStream.CanWrite)
{
nStream.Write(buffer, 0, buffer.Length);
nStream.Flush();
}
}
问题是,无论我从组合框中选择什么IP,我发送的消息总是指向/发送到连接到服务器的最后一个IP。。请有人指出我的错误!我们将不胜感激。
看看那些行:
IPAddress ipep =IPAddress.Parse(comboBox1.SelectedItem.ToString());
Socket server = new Socket(AddressFamily.InterNetwork , SocketType.Stream, ProtocolType.Tcp);
IPEndPoint ipept = new IPEndPoint( ipep, hostPort);
NetworkStream nStream = tcpClient.GetStream();
您正在创建一个新的套接字,但您正在将数据发送到全局变量tcpClient
中存储的套接字(因为它没有在方法中定义),因此完全忽略从组合框解析的IPEndPoint。
您不应该为了向客户端发送数据而创建新的套接字。相反,将所有客户端存储在集合中,并根据组合框的输入检索适当的客户端。