0

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

到目前为止,我正处于与另一个 c->s->c 分开聊天 client->server->client 的阶段。会发生什么 - 我运行 client1 并且一切正常。然后我运行client2,一切正常,但是第一个客户端停止工作,然后我在第二个客户端上获取的第一条消息是我从client1发送的最后一条消息(但实际上并没有从服务器接收回它)。所以我认为流存在问题 - 2 个客户端以某种方式获取彼此的流。这是服务器的一些部分(相关的):TheServer

HandleClientComm(object client)正在处理接收发送操作。

这是处理接收发送操作的客户端代码部分:TheClient

我进入 An unhandled exception of type 'System.OutOfMemoryException' occurred...服务器 Byte[] bData = new Byte[BitConverter.ToInt32(bSize, 0)];

太...是的,流有问题(在我看来)。但我真的不知道如何让服务器正确区分客户端的线程。

我愿意接受任何建议。

PS我没有直接在这里发布代码,因为它会变得太长。

4

1 回答 1

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();
于 2013-04-29T07:31:07.573 回答