Member 12330615 Ответов: 1

Как я могу получить прямой точки ошибка протокола TCP повторное подключение?


# В случае моей коммуникационной программы с ПК и сервером, использующим TCP/IP, я не знаю причины ошибки повторного подключения следующим образом.


1. Один тип протокола TCP/IP сервера а есть программы, которые используют 2 порта 502, 3999 -
502 порта, используемого для приема данных с ПК, 3999 портов, используемых для отправки данных на тот же ПК

2. В программе ПК, с помощью VC++ с использованием библиотеки winsocks, программа countpart сервера на Линукс.

3. Организация Linux-сервера, порт 3999 по поддерживать протокол TCP/IP-параметры.

4. Проблема в том, что когда сервер закрывает сокет с помощью 502 в любое время, и я проверил сигналы Fin/Fin Ack между двумя серверами - ПК и Linux-сервером, проверив wireshark.

5. Другой программы, ПК не может подключиться на порт 502 - который уже закрыт - с одного IP адреса на сервер .

5.Даже если я могу что-то сделать, я не могу повторно подключиться к серверу по тому же ip-адресу и Порту 502.

6. WSAGetLastErrorcode = WSAEISCONN (10056)

7. Образец, который выглядит следующим образом.

int result= inet_pton(AF_INET, "192.168.0.222", / *адрес сервера */, ToServer. sin_addr);
ToServer. sin_port = htons(502);

инт ret_code = подключение(ClientSocket, (структура структуры *)&ампер;ToServer, оператор sizeof(ToServer));

if (ret_code != 0)
{
Сон(10);
retcnt++;
ret_code = WSAGetLastError();
if (ret_code == WSAEISCONN)
{
AfxMessageBox(_T ("ошибка подключения. Уже связывание с другим процессом."));
Гото выход;
...

8. Наконец, вопрос :
Один сервер, использующий два порта, закрывает только один TCP-порт, другое внешнее приложение не может подключить закрытый тот же порт

Где же недостающие точки?

Заранее благодарю вас,

Что я уже пробовал:

Я потратил впустую 2 месяца долгого времени, чтобы решить эту проблему.

1 Ответов

Рейтинг:
4

Jochen Arndt

Похоже, что проблема находится на стороне сервера.

Обычно сервер:


  • Создает сокет
  • Привязывает сокет к локальному адресу
  • Прослушивает соединения
  • Принимает соединения с использованием нового сокета
  • Обслуживает запросы с помощью сокета, связанного с подключением
  • Закрывает соединение и соответствующий сокет
  • Вернется в состояние прослушивания


Из вашего описания кажется, что вы закрываете начальный серверный сокет, а не связанный с ним (или оба), или не возвращаетесь в состояние прослушивания.