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,出于教育目的,我正在编写一个通过SQL查询的程序。它应该是这样工作的: 但是Receive不返回任何数据 private static byte[] ReadToEnd(Socket mySocket) { byte[] b = new byte[mySocket.ReceiveBufferSize]; int len = 0; using (MemoryStream m = new MemoryStream()) { while (mySocket.Poll(10

出于教育目的,我正在编写一个通过SQL查询的程序。它应该是这样工作的:

但是Receive不返回任何数据

private static byte[] ReadToEnd(Socket mySocket)
{
  byte[] b = new byte[mySocket.ReceiveBufferSize];
  int len = 0;
  using (MemoryStream m = new MemoryStream())
  {
      while (mySocket.Poll(1000000, SelectMode.SelectRead) &&
                (len = mySocket.Receive(b, mySocket.ReceiveBufferSize, SocketFlags.None)) > 0)
      {
          m.Write(b, 0, len);
          Console.WriteLine("Я тут");
      }
      Console.WriteLine("и тут");
      return m.ToArray();

   }
}
static void Main(string[] args)
{
    TcpListener myTCP = new TcpListener(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8888));
    Console.WriteLine("Прослушиваю порт");
    while (true)
    {   
        myTCP.Start(); // Запускаю процесс прослушивания
        if (myTCP.Pending()) // Если есть запрос
        {
            Console.WriteLine("Соединение добавлено в очередь");
            using (Socket myClient = myTCP.AcceptSocket()) // То создаю сокет для этого запроса
            {
                if (myClient.Connected) // Если сокет открыт, то считываю поток байтов от клиента
                {

                        Console.WriteLine("Открываю сокет для считывания запроса");
                        byte[] sqlQuery = new byte[myClient.ReceiveBufferSize];
                        sqlQuery = ReadToEnd(myClient);    
                }
            }
        }
    }
}

作为回答:)记住在任何程序中发送到服务器的所有SQL查询,比如代理服务器作为TCP数据包在
MTU
上拆分,我建议先在数据包中添加长度(比如前4个字节),然后读取,直到获得所需的字节数。这样,你就不会暂停你的程序,直到它有了所有的信息。我写了客户端发送请求到端口监听我的程序。告诉我为什么while(mySocket.Poll(1000000,SelectMode.SelectRead)和&n(len=mySocket.Receive(b,mySocket.ReceiveBufferSize,SocketFlags.None))>0为false?SelectMode.SelectRead返回false