C#-多线程服务器中的客户端流
我已经实现了发送消息客户端->服务器,并实际同时连接多个客户端。但我想做的是,连接两个客户,让他们彼此聊天。如果第三个客户连接,那么他开始与其他两个客户聊天 到现在为止,我正在与另一个c->s->c分别聊天客户端->服务器->客户端。发生的事情是-我运行client1,一切正常。然后我运行client2,一切正常,但第一个客户端停止工作,然后我在第二个客户端上获取的第一条消息是我从client1发送的最后一条消息(但实际上并没有从服务器接收回)。 因此,我认为流有问题——两个客户端以某种方式获取彼此的流。 以下是服务器的一些部分(相关部分): HandleClient(对象客户端)正在处理接收和发送操作 下面是客户端代码部分,用于处理接收和发送操作: 我得到C#-多线程服务器中的客户端流,c#,multithreading,client-server,networkstream,C#,Multithreading,Client Server,Networkstream,我已经实现了发送消息客户端->服务器,并实际同时连接多个客户端。但我想做的是,连接两个客户,让他们彼此聊天。如果第三个客户连接,那么他开始与其他两个客户聊天 到现在为止,我正在与另一个c->s->c分别聊天客户端->服务器->客户端。发生的事情是-我运行client1,一切正常。然后我运行client2,一切正常,但第一个客户端停止工作,然后我在第二个客户端上获取的第一条消息是我从client1发送的最后一条消息(但实际上并没有从服务器接收回)。 因此,我认为流有问题——两个客户端以某种方式获取
在中发生“System.OutOfMemoryException”类型的未处理异常…
在服务器的
Byte[]bData=新字节[BitConverter.ToInt32(bSize,0)]代码>
所以。。。是的,溪流有些问题(依我看)。但我真的不知道如何让服务器正确区分客户端线程
我愿意接受任何建议
另外,我不会直接在这里发布代码,因为它会变得太长。这是handleclientcom()的第一部分。
:
您有tcpClient
,它是作为参数发送的客户端,但是NetworkStream
不是针对该客户端的,而是针对clientList[n]
,并且n
是一个类范围的变量。在该方法的后面部分,在while
循环中,使用:
stm = clientList[n].GetStream();
一旦增加n
,所有运行HandleClientComm()
的线程都将从/向最后一个客户端接收和发送消息
您在HandleClientComm()
中使用的NetworkStream
应该从tpcClient
创建,因此运行HandleClientComm()
的每个线程都为自己的客户端服务:
stm = theClient.GetStream();
谢谢,成功了!:)现在剩下的就是让它在客户端之间聊天,如果我有4个客户端,那么让每个客户端找到另一个端点,而不是在两个以上的客户端之间混合。但我会弄明白的(我希望…)
stm = theClient.GetStream();