static void Main(string[] args)
{
Console.Title = "Socket Server";
Console.WriteLine("Listening for client messages");
Socket serverSocket = new Socket(AddressFamily.InterNetwork,
SocketType.Stream,
ProtocolType.Tcp);
IPAddress serverIp = IPAddress.Any;
IPEndPoint serverEP = new IPEndPoint(serverIp, 8000);
SocketPermission socketPermission = new SocketPermission(NetworkAccess.Accept,
TransportType.Tcp,
"127.0.0.1", 8000);
serverSocket.Bind(serverEP);
serverSocket.Listen(2);
while(true)
{
//Socket connection = serverSocket.Accept();
connection = serverSocket.Accept();
Thread clientThread = new Thread(new ParameterizedThreadStart(MultiUser));
clientThread.Start(connection);
}
}
public static void MultiUser(object connection)
{
byte[] serverBuffer = new byte[10025];
string message = string.Empty;
int bytes = ((Socket)connection).Receive(serverBuffer, serverBuffer.Length, 0);
message += Encoding.ASCII.GetString(serverBuffer, 0, bytes);
Console.WriteLine(message);
TcpClient client = new TcpClient();
client.Client = ((Socket)connection);
IntPtr handle = client.Client.Handle;
}
我想写一个聊天程序,它有一个服务器和两个客户端 . 问题是,我无法通过服务器将客户端1发送的消息指向客户端2 . 服务器如何区分线程,以便它可以将收到的消息从client1发送到client2?
1 回答
每个客户都有自己的句柄 . 您可以通过 Handle 属性访问它 . 例如:
然后,您需要做的就是将其存储在哈希表中,并遍历它,查找可用数据 . 当您在其中一个连接上检测到线路上的数据时,请将其保存并重新传输到表中的其他客户端 .
请记住确保您创建此多线程,以便一个客户端上的侦听请求不会阻止其他客户端上的任何发送或接收功能!
我在这里添加了一些你应该可以使用的代码(在我的系统上测试过)
您将需要从主线程调用 HandleClients ,该线程检查是否有任何待处理请求,并在循环上运行 .