C#中的TCP套接字服务器/客户端-被动接收数据
我有一些代码,在其中我试图接收响应数据,以及被动。然而,我目前被动接收数据的尝试失败了。我想知道是否有人能帮我解释一下C#中的TCP套接字服务器/客户端-被动接收数据,c#,sockets,tcp,C#,Sockets,Tcp,我有一些代码,在其中我试图接收响应数据,以及被动。然而,我目前被动接收数据的尝试失败了。我想知道是否有人能帮我解释一下 static void Listen() { while (_socket.Connected) { try { byte[] receivedBuffer = new byte[2048]; int bytesReceived
static void Listen()
{
while (_socket.Connected)
{
try
{
byte[] receivedBuffer = new byte[2048];
int bytesReceived = _socket.Receive(receivedBuffer);
byte[] data = new byte[bytesReceived];
Array.Copy(receivedBuffer, data, bytesReceived);
Console.WriteLine("Server: \"" + Encoding.ASCII.GetString(data) + "\"");
}
catch (SocketException e) { Console.WriteLine(e.Message); }
}
}
因此,这样做是为了在用户向控制台输入文本时被动地从服务器控制台捕获数据。客户端通过TCP套接字连接到服务器。目前,这些数据没有被捕获,也没有被捕获。相反,它保留在该方法捕获的缓冲区中
static void Send()
{
while (_socket.Connected)
{
try
{
Console.Write("Enter Request: ");
string request = Console.ReadLine();
byte[] buffer = Encoding.ASCII.GetBytes(request);
_socket.Send(buffer);
byte[] receivedBuffer = new byte[2048];
int bytesReceived = _socket.Receive(receivedBuffer);
byte[] data = new byte[bytesReceived];
Array.Copy(receivedBuffer, data, bytesReceived);
Console.WriteLine(Encoding.ASCII.GetString(data));
}
catch (SocketException) { }
}
}
然而,我当前被动接收数据的尝试失败了
也许你想解释一下这意味着什么……我以为这就是我通过提供试图接收数据的代码所做的事情?代码不是一个解释。详细说明预期的和实际的行为。我尽了最大努力来详细说明-如果您还想了解更多信息,请告诉我。发送的TCP字节数!=在所有情况下都接收字节。如果您在另一端发送两条消息123
,456
,您可能会收到两条消息123
,456
,或者您可能会收到12
,3456
,或者您可能会收到12
,34
,56
。你需要“框定”你的消息,或者在你检查的终止符上加上某种类型的终止符(\n
和\0
是常用的选择),或者在发送字符串之前发送字符串的长度。这样接收方就可以知道一条消息的结束和另一条消息的开始。