Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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#_Sockets - Fatal编程技术网

C# 接收数据为空的套接字

C# 接收数据为空的套接字,c#,sockets,C#,Sockets,我正在尝试从连接到我的服务器的应用程序接收数据,但它将数据发送为空 //Receive Data int received = socket.EndReceive(AR); byte[] dataBuf = new byte[received]; Array.Copy(_buffer, dataBuf, received); string ReserveText = Encoding.ASCII.GetString(dataBuf); //Write to Console if no error

我正在尝试从连接到我的服务器的应用程序接收数据,但它将数据发送为空

//Receive Data
int received = socket.EndReceive(AR);
byte[] dataBuf = new byte[received];
Array.Copy(_buffer, dataBuf, received);
string ReserveText = Encoding.ASCII.GetString(dataBuf);
//Write to Console if no error appears
Console.WriteLine("Message received from client: " + ReserveText);
它当前正在打印从客户端收到的消息:,并且在该消息之后打印“ReserveText”,但reserve测试显然是空的?上面的代码是我的服务器代码,下面的代码是我在客户机中共享的完整void和代码

完全无效:

public void ReceiveCallback(IAsyncResult AR)
{
    Socket socket = (Socket)AR.AsyncState;
    string clientIP = socket.RemoteEndPoint.ToString();
    try
    {
        //Receive Data
        int received = socket.EndReceive(AR);
        byte[] dataBuf = new byte[received];
        Array.Copy(_buffer, dataBuf, received);
        string ReserveText = Encoding.ASCII.GetString(dataBuf);
        //Write to Console if no error appears
        Console.WriteLine("Message received from client: " + ReserveText);

        string ResponceText = "Testing Response";
        byte[] data = Encoding.ASCII.GetBytes(ResponceText);
        //socket.BeginSend(data, 0, data.Length, SocketFlags.None, new AsyncCallback(SendCallback), socket);
        SendAsync(socket, data, 0, data.Length);
        Console.WriteLine("Message sent to client: " + ResponceText);

        socket.BeginReceive(_buffer, 0, _buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveCallback),
            socket);
    }
    catch (Exception)
    {
        Console.WriteLine("Client Disconnected");
        //TODO: DISPOSE THE SOCKET/SESSION FROM _clients
    }
}
下面是客户端发送到服务器的方法

public static string SendMessageAndReturnResponse(string req)
{
    byte[] buffer = Encoding.ASCII.GetBytes(req);
    _clientSocket.Send(buffer);

    byte[] receivedBuf = new byte[1024];
    int rec = _clientSocket.Receive(receivedBuf);
    byte[] data = new byte[rec];
    Array.Copy(receivedBuf, data, rec);
    return Encoding.ASCII.GetString(data);
}

捕捉异常并忽略它们是一种非常糟糕的做法。特别是,您永远不会知道收到了哪个异常。我建议您要么不要捕获任何异常,要么捕获一些特定的异常,比如SocketException。在
catch
块中,一定要查看的值,以确定刚才发生了哪个问题。我没有看到任何明显的错误。所以不管问题是什么,要么是在一些你没有共享的代码中,要么是完全其他的东西。请提供可靠的重现问题的信息。同时,我将提到,您不需要将接收到的数据复制到新的缓冲区;只需使用
GetString()
方法重载,它允许您传递输入字节的开始索引和长度(这样您就可以直接使用
\u buffer
)。开始接收事件在哪里?在字节计数为0的事件中接收数据是正常的。您必须忽略任何没有数据的接收事件。您还使用ASCII编码,这将删除不可打印的字符。您可能需要改用UTF8编码。