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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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,当我很快地多次从客户端发送数据时,我不会在服务器中单独接收这些数据。我将它们作为一个大数据突发接收。我需要发送每个收到的数据的答复。但我不能这样做,因为这些数据在一个大的突发中连接。如何为每个接收到的数据发送回复? 下面是服务器中回调方法的代码: private void RecieveCallback(IAsyncResult asyncResult) { ConnectionInfo connection = (ConnectionInfo)asyncResu

当我很快地多次从客户端发送数据时,我不会在服务器中单独接收这些数据。我将它们作为一个大数据突发接收。我需要发送每个收到的数据的答复。但我不能这样做,因为这些数据在一个大的突发中连接。如何为每个接收到的数据发送回复? 下面是服务器中回调方法的代码:

    private void RecieveCallback(IAsyncResult asyncResult)
    {
        ConnectionInfo connection = (ConnectionInfo)asyncResult.AsyncState;
        try
        {
            int bytesRead = connection.Socket.EndReceive(asyncResult);

            if (bytesRead > 0)
            {
                for (int i = 0; i < bytesRead; i++)
                    connection.FullBufferReceive.Add(connection.BufferReceive[i]);
                if (bytesRead == connection.BufferReceive.Length)
                {
                    connection.Socket.BeginReceive(connection.BufferReceive, 0, connection.BufferReceive.Length, 0,
                                                   new AsyncCallback(RecieveCallback), connection);
                    Console.WriteLine("Bytes recieved -- " + bytesRead + " by " + connection.Id);
                }
                else
                {
                    Console.WriteLine("Bytes recieved " + bytesRead + " by " + connection.Id);

                    _serverController.StartProcess(connection);
                }
            }
            else  
                CloseConnection(connection);
        }
        catch (Exception e)
        {
            CloseConnection(connection);
            Console.WriteLine(e.ToString());
        }
    }
private void receiveCallback(IAsyncResult asyncResult)
{
ConnectionInfo连接=(ConnectionInfo)asyncResult.AsyncState;
尝试
{
int bytesRead=connection.Socket.EndReceive(异步结果);
如果(字节读取>0)
{
for(int i=0;i
如果您的套接字是TCP(我从代码中看不出来),这是预期的行为,因为TCP不像UDP那样被框接。您需要自己定义数据。

问题是?请描述这个问题;)客户端代码可能会更有用。也许您需要调用
.Flush()
+1,同样,当使用UDP时,如果其中一个网络跃点认为消息太大,您的消息可能会被拆分。好的,这意味着:当您在客户端执行X字节的“发送”操作,并在服务器上执行读取操作时,不要期望返回X字节。您需要一直读取,直到找到协议规定的分隔符为止(如换行符-另一种选择是首先发送数据的长度以某种编码方式读取,然后发送数据并一直读取,直到读取了那么多)。祝你好运