Как вызвать Socket Send и Receive несколько раз, не закрывая сокет? - PullRequest
1 голос
/ 22 марта 2012

Я использую класс .NET Socket .

По сути, моя программа - отправлять команды XML через TCP на мой сервер (на котором запущены некоторые сторонние сервисы), и он отправляет обратно ответ XML.

То, что я хотел сделать, - это отправлять и получать несколько раз, не закрывая сокет, потому что сервер, кажется, замедляется, если я открываю и закрываю сокет слишком много раз за короткий период времени.

Урезанная версия моего кода:

//Connects to server
s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint ipe = new IPEndPoint("123.123.123.123", 8199);
socket.Connect(ipe);

//Send my message
int sent = sock.Send(buffer, buffer.Length, SocketFlags.None); //buffer contains my XML data

//Receives respond from server
byte[] buf = new byte[65536];
int ret = socket.Receive(buffer, 0, 65536, SocketFlags.None);

//Send my message again without closing the socket
sent = sock.Send(buffer, buffer.Length, SocketFlags.None); //buffer contains my XML data

//Receives respond from server failed..
ret = socket.Receive(buffer, 0, 65536, SocketFlags.None);

Отправка / получение работает в первый раз, но не во второй раз. Во второй раз выдается исключение «Существующее соединение было принудительно закрыто удаленным хостом». Что мне нужно сделать, прежде чем я смогу выполнить еще одну отправку / получение?

Большое спасибо за чтение.

1 Ответ

1 голос
/ 22 марта 2012

Возможно, проблема в этих

  • , другая конечная точка могла закрыть соединение
  • ваш метод получения блокируется, так как другой клиент не отправляет данные

Возможно, сервер закрыл соединение, поскольку вы могли отправить неверный пакет.проверьте правильность отправляемых данных.Отладьте или установите пакет tcp / ip на стороне сервера и проверьте полученный пакет.

...