Связь сервера с клиентом через Socket C# - PullRequest
0 голосов
/ 21 апреля 2020

Я создал приложение, которое связывается с сервером по 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));

1 Ответ

1 голос
/ 21 апреля 2020

Как было предложено в комментариях, вы должны утверждать, что вы читаете все данные, а не только первый блок.

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...