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

问题描述 投票:0回答:1

我在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
c# sockets tcp server client
1个回答
0
投票

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

    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();
© www.soinside.com 2019 - 2024. All rights reserved.