套接字无响应

时间:2019-04-05 18:06:33

标签: c# sockets

我已经建立了通过套接字进行通信的服务器和客户端。

当我在同一台计算机上同时运行服务器和客户端时,服务器和客户端都会收到预期的消息。

当我在VM或其他物理计算机上运行服务器,而在我的主机上运行客户端时,服务器会很好地接收消息,但客户端永远不会收到回复

我确保在所有3台计算机(2台物理计算机和1台虚拟计算机)上禁用Windows防火墙和我的防病毒软件,以确保它不是安全问题。

相关代码如下

服务器

public static string StartClient(string message, string ip)
{
    // Data buffer for incoming data.  
    byte[] bytes = new byte[1024];

    //Declare this at class scope level so it can be returned outside of try/catch blocks
    string response = null;

    // Connect to a remote device.  
    try
    {
        // Establish the remote endpoint for the socket.  
        // This example uses port 11000 on the local computer.  
        IPHostEntry ipHostInfo = Dns.GetHostEntry(ip);
        IPAddress ipAddress = ipHostInfo.AddressList[0];
        IPEndPoint remoteEP = new IPEndPoint(ipAddress, 11000);

        //string hostName = Dns.GetHostName();
        //string myIP = Dns.GetHostByName(hostName).AddressList[0].ToString(); ;

        //Debug.WriteLine( ipAddress );

        // Create a TCP/IP  socket.  
        Socket sender = new Socket(ipAddress.AddressFamily,
            SocketType.Stream, ProtocolType.Tcp);

        // Connect the socket to the remote endpoint. Catch any errors.  
        try
        {
            sender.Connect(remoteEP);

            Console.WriteLine("Socket connected to {0}",
                sender.RemoteEndPoint.ToString());

            // Encode the data string into a byte array.  
            byte[] msg = Encoding.ASCII.GetBytes(message + "<EOF>");

            // Send the data through the socket.  
            int bytesSent = sender.Send(msg);

            // Receive the response from the remote device.  
            int bytesRec = sender.Receive(bytes);
            Console.WriteLine("Echoed test = {0}",
                Encoding.ASCII.GetString(bytes, 0, bytesRec));

            response = Encoding.ASCII.GetString(bytes, 0, bytesRec);

            // Release the socket.  
            sender.Shutdown(SocketShutdown.Both);
            sender.Close();



        }
        catch (ArgumentNullException ane)
        {
            Console.WriteLine("ArgumentNullException : {0}", ane.ToString());
        }
        catch (SocketException se)
        {
            Console.WriteLine("SocketException : {0}", se.ToString());
        }
        catch (Exception e)
        {
            Console.WriteLine("Unexpected exception : {0}", e.ToString());
        }

    }
    catch (Exception e)
    {
        Console.WriteLine(e.ToString());
    }

    return response;
}

客户

{{1}}

}

1 个答案:

答案 0 :(得分:0)

可能是因为客户端接收到超过1024个字节。尝试增加接收缓冲区的大小。 还将if(data.IndexOf(“”)> -1)添加到客户端项目中。