我在弄清楚为什么我只收到来自我的计算机上运行的服务器应用程序(LocalHost)的一个回复时遇到了一些麻烦。我没有此服务器应用程序的源代码,但它是一个 java 应用程序。发送的消息是 xml 结构,并且必须以 EoT 标记结尾。
通讯:
- 客户端连接到服务器。
- 客户端向服务器发送消息。
- 服务器将收到的消息发送给客户端。
- 客户端向服务器发送消息。
- 服务器发送一个传输结束字符。
- 客户端向服务器发送消息。
- 服务器发送一个传输结束字符。
这是我的客户端连接、发送和接收的方式:
public bool ConnectSocket(string server, int port)
{
System.Net.IPHostEntry hostEntry = null;
try
{
// Get host related information.
hostEntry = System.Net.Dns.GetHostEntry(server);
}
catch (System.Exception ex)
{
return false;
}
// Loop through the AddressList to obtain the supported AddressFamily. This is to avoid
// an exception that occurs when the host IP Address is not compatible with the address family
// (typical in the IPv6 case).
foreach (System.Net.IPAddress address in hostEntry.AddressList)
{
System.Net.IPEndPoint ipe = new System.Net.IPEndPoint(address, port);
System.Net.Sockets.Socket tempSocket = new System.Net.Sockets.Socket(ipe.AddressFamily, System.Net.Sockets.SocketType.Stream,
System.Net.Sockets.ProtocolType.Tcp);
tempSocket.Connect(ipe);
if (tempSocket.Connected)
{
m_pSocket = tempSocket;
m_pSocket.NoDelay = true;
return true;
}
else
continue;
}
return false;
}
}
public void Send(string message)
{
message += (char)4;//We add end of transmission character
m_pSocket.Send(m_Encoding.GetBytes(message.ToCharArray()));
}
private void Recive()
{
byte[] tByte = new byte[1024];
m_pSocket.Receive(tByte);
string recivemessage = (m_Encoding.GetString(tByte));
}