【发布时间】:2015-04-16 23:56:20
【问题描述】:
我正在开发一个应用程序,我需要通过套接字连接发送命令,然后接收它发回的数据。发送命令后,我很难从服务器取回任何东西。最初有人告诉我“以二进制 0 结束包”,我认为这可能会让我失望,因为我不确定如何在 c# 中执行此操作。这是一些源代码:
Socket sender = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
sender.Connect(remoteEp);
Console.WriteLine("Socket connected to {0}", sender.RemoteEndPoint.ToString());
byte zero = Encoding.Default.GetBytes("0")[0];
byte[] msg = Encoding.ASCII.GetBytes("PACK_ALARM.ALARM_GETCOUNTI,294,0" + zero);
int bytesSent = sender.Send(msg);
int bytesReceived = sender.Receive(bytes);
Console.WriteLine("Test = {0}", Encoding.ASCII.GetString(bytes, 0, bytesReceived));
sender.Shutdown(SocketShutdown.Both);
sender.Close();
}
catch (ArgumentNullException ane)
{
Console.Write("ArgumentNullException : {0}", ane.ToString());
}
catch (SocketException se)
{
Console.WriteLine("Socket Exception : {0}", se.ToString());
}
catch (Exception e)
{
Console.WriteLine("Unexpected exception : {0}", e.ToString());
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
【问题讨论】:
-
您发送的是 text
0,而不是 binary0。只需发送文字0。或者,既然您已经在发送文本,只需在其末尾添加\0。