Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#-多线程服务器中的客户端流_C#_Multithreading_Client Server_Networkstream - Fatal编程技术网

C#-多线程服务器中的客户端流

C#-多线程服务器中的客户端流,c#,multithreading,client-server,networkstream,C#,Multithreading,Client Server,Networkstream,我已经实现了发送消息客户端->服务器,并实际同时连接多个客户端。但我想做的是,连接两个客户,让他们彼此聊天。如果第三个客户连接,那么他开始与其他两个客户聊天 到现在为止,我正在与另一个c->s->c分别聊天客户端->服务器->客户端。发生的事情是-我运行client1,一切正常。然后我运行client2,一切正常,但第一个客户端停止工作,然后我在第二个客户端上获取的第一条消息是我从client1发送的最后一条消息(但实际上并没有从服务器接收回)。 因此,我认为流有问题——两个客户端以某种方式获取

我已经实现了发送消息客户端->服务器,并实际同时连接多个客户端。但我想做的是,连接两个客户,让他们彼此聊天。如果第三个客户连接,那么他开始与其他两个客户聊天

到现在为止,我正在与另一个c->s->c分别聊天客户端->服务器->客户端。发生的事情是-我运行client1,一切正常。然后我运行client2,一切正常,但第一个客户端停止工作,然后我在第二个客户端上获取的第一条消息是我从client1发送的最后一条消息(但实际上并没有从服务器接收回)。 因此,我认为流有问题——两个客户端以某种方式获取彼此的流。 以下是服务器的一些部分(相关部分):

HandleClient(对象客户端)正在处理接收和发送操作

下面是客户端代码部分,用于处理接收和发送操作:

我得到
在中发生“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();