我已经实现了发送消息客户端 - >服务器并实际连接多个客户端。但我想要做的是连接2个客户端并让他们自己聊天。如果第三个客户端连接 - 那么他就开始与其他客户聊天。
到目前为止,我正处于与另一个c-> s-> c分开聊天客户 - >服务器 - >客户端的阶段。会发生什么 - 我运行client1,一切正常。然后我运行client2并且使用它一切正常,但第一个客户端停止工作,然后我在第二个客户端上获取的第一条消息是我从client1发送的最后一条消息(但实际上并没有从服务器接收到它)。 所以我认为流有问题 - 两个客户端以某种方式获取彼此的流。 以下是服务器的某些部分(相关部分):TheServer
HandleClientComm(对象客户端)正在处理接收发送操作。
这是客户端代码部分,它处理接收 - 发送操作:TheClient
我明白了
An unhandled exception of type 'System.OutOfMemoryException' occurred...
in
在服务器上
Byte[] bData = new Byte[BitConverter.ToInt32(bSize, 0)];
sooo ...是的,溪流有问题(我认为)。但我真的不知道服务器如何正确区分客户端的线程。
我愿意接受任何建议。
P.S。我不是直接在这里发布代码,因为它会花太长时间。
答案 0 :(得分:1)
这是HandleClientComm()
的第一部分:
private void HandleClientComm(object client)
{
TcpClient tcpClient = (TcpClient)client;
NetworkStream stm = clientList[n].GetStream();
msg = new TheMessage();
您拥有tcpClient
,这是您作为参数发送的客户端,但NetworkStream
不是 客户端,而是clientList[n]
, n
是一个全班变量。稍后在该方法中,在while
循环中,您使用:
stm = clientList[n].GetStream();
一旦增加n
,所有运行HandleClientComm()
的线程都将从/向最后一个客户端接收和发送消息。
NetworkStream
中使用的HandleClientComm()
应该是从tpcClient
创建的,因此每个运行HandleClientComm()
的线程都会为自己的客户端提供服务:
stm = theClient.GetStream();