Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.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#中的问题套接字TCP IP在停止之前仅收到来自客户端的一条消息_C#_Sockets_Tcp_Server_Client - Fatal编程技术网

C#中的问题套接字TCP IP在停止之前仅收到来自客户端的一条消息

C#中的问题套接字TCP IP在停止之前仅收到来自客户端的一条消息,c#,sockets,tcp,server,client,C#,Sockets,Tcp,Server,Client,我的服务器在tcp/ip中有问题,因为在收到一条消息后,有一条消息无法工作。 我不知道使用一段时间是否正确,以及如何使用它。 有什么建议吗 多谢各位 my method() sdk = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); sdk.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8052))

我的服务器在tcp/ip中有问题,因为在收到一条消息后,有一条消息无法工作。 我不知道使用一段时间是否正确,以及如何使用它。 有什么建议吗

多谢各位

   my method()

        sdk = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        sdk.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8052));
        sdk.Listen(10);
        Socket accepted = sdk.Accept();
        Buffer = new byte[accepted.SendBufferSize];
        int bytesRead = accepted.Receive(Buffer);
        byte[] formatted = new byte[bytesRead];
        for (int i = 0; i < bytesRead; i++)
        {
            formatted[i] = Buffer[i];
        }
        Debug.Log("\t Server" + "\n");
        string stradata = Encoding.ASCII.GetString(formatted);
        Debug.Log("-->" + "" + stradata + "\n\n");
        testo = stradata;
        //sdk.Close();   tried to uncomment 
        //accepted.Close(); tried to uncomment
我的方法()
sdk=新套接字(AddressFamily.InterNetwork、SocketType.Stream、ProtocolType.Tcp);
Bind(新的IPEndPoint(IPAddress.Parse(“127.0.0.1”),8052);
听(10);
接受套接字=sdk.Accept();
Buffer=新字节[accepted.SendBufferSize];
int bytesRead=accepted.Receive(缓冲区);
字节[]格式化=新字节[字节读取];
for(int i=0;i”+“+stradata+”\n\n”);
testo=stradata;
//sdk.Close();试图取消注释
//已接受。关闭();试图取消注释

您需要不断地从套接字读取数据,直到您读取了所需的所有数据

    sdk = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    sdk.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8052));
    sdk.Listen(10);
    Socket accepted = sdk.Accept();
    Buffer = new byte[accepted.SendBufferSize];
    while (true)
    {
        // begin reading continually from the socket

        // Socket::Receive() will block until it gets some data
        // Exception handling required here for when client closes connection
        int bytesRead = accepted.Receive(Buffer);
        byte[] formatted = new byte[bytesRead];
        for (int i = 0; i < bytesRead; i++)
        {
            formatted[i] = Buffer[i];
        }
        Debug.Log("\t Server" + "\n");
        string stradata = Encoding.ASCII.GetString(formatted);
        Debug.Log("-->" + "" + stradata + "\n\n");

        // Need to add some exit logic here eg,
        if(stradata.Contains("EXIT"))
            break;
    }
    sdk.Close(); 
    accepted.Close();
sdk=newsocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
Bind(新的IPEndPoint(IPAddress.Parse(“127.0.0.1”),8052);
听(10);
接受套接字=sdk.Accept();
Buffer=新字节[accepted.SendBufferSize];
while(true)
{
//从插座开始连续读取
//套接字::Receive()将阻塞,直到它获得一些数据
//当客户端关闭连接时,此处需要异常处理
int bytesRead=accepted.Receive(缓冲区);
字节[]格式化=新字节[字节读取];
for(int i=0;i”+“+stradata+”\n\n”);
//需要在这里添加一些退出逻辑,例如,
如果(stradata.Contains(“退出”))
打破
}
sdk.Close();
已接受。关闭();

连接有三个属性1)源IP地址2)目标IP地址3)端口号。您只能有一个三个属性都相同的连接。您正试图用相同的参数打开第二个连接。@jdweng TCP连接有4个唯一属性,您列出的三个属性加上源端口,源端口通常由操作系统为出站连接自动分配,但是,您可以手动设置。源端口是自动分配的,因此它不是阻止第二次连接的因素。