我已经创建了一个应用程序,该应用程序正在使用IP /端口与服务器进行通信。它正在发送ISO请求字符串(ASCII格式的位图),并接收相同格式的响应字符串。通过socket.send发送字节并在socket.receive方法中接收字节时。我可以看到扩展的ASCII字符在另一端(服务器端/克林特端)被更改了。我正在使用下面的代码。任何人都可以提出建议,如何解决该问题。
IPAddress ipAddr = IPAddress.Parse("10.03.0.18");
IPEndPoint localEndPoint = new IPEndPoint(ipAddr, 12345);
// Creation TCP/IP Socket using
// Socket Class Costructor
Socket sender = new Socket(ipAddr.AddressFamily,SocketType.Stream, ProtocolType.Tcp);
sender.Connect(localEndPoint);
string requeststring = AccountValidationRequest();
byte[] messageSent = Encoding.ASCII.GetBytes(requeststring);
int byteSent = sender.Send(messageSent);
byte[] ServerResponse = new byte[1024];
int byteRecv = sender.Receive(ServerResponse);
string ISO8583Message = Encoding.ASCII.GetString(ServerResponse, 0, byteRecv);
Console.WriteLine("Response received from server: --> :{0}", Encoding.ASCII.GetString(ServerResponse, 0, byteRecv));
正如注释中所建议的,您应该断言您已读取所有数据,而不仅是第一块。
Byte[] bytesReceived = new Byte[256];
int bytes = 0;
var ISO8583Message = "Response: \n";
do {
bytes = sender.Receive(bytesReceived, bytesReceived.Length, 0);
ISO8583Message = ISO8583Message + Encoding.ASCII.GetString(bytesReceived, 0, bytes);
}
while (bytes > 0);
[在https://docs.microsoft.com/pl-pl/dotnet/api/system.net.sockets.socket?view=netframework-4.8上使用套接字有一些很好的例子。