0
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;
}
我想写它有一台服务器和2个客户端聊天程序。问题在于,我无法通过服务器将客户端1发送的消息导向客户端2。服务器如何区分线程,以便它可以将接收到的消息从client1发送到client2?Socket编程:服务器/客户端和线程使用
一个简单的方法是创建一个''Message'类,其中包含'to','''','message'等东西。然后将这个对象发送到您的服务器。您的服务器可以读取'to'字段并将其发送到另一个客户端。 –
您需要保留已连接客户端的列表(哈希,矢量),迭代器并将其发送给所有* ther *客户端。由于您正在使用线程,因此您需要在访问该列表时提供一些互斥功能。 –
@HunterMcMillen如果两个客户端都使用“127.0.0.1”,我如何通过创建一个Message类来区分它们? – Encinaar