C# 我能';无法从客户端读取数据
出于教育目的,我正在编写一个通过SQL查询的程序。它应该是这样工作的: 但是Receive不返回任何数据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
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