Привет, я внедряю приложение для чата P2P, где сервер будет посредником для обмена IP-адресами и портами с подключающимся узлом. Я получаю ошибку WSAEAFNOSUPPORT 10047.
Я создал сокет UDP
sockfd = сокет (AF_INET, SOCK_DGRAM, IPPROTO_UDP); затем я привязываю его к локальному IP и порту.
if (bind(sockfd,(struct sockaddr *)&localaddr,sizeof(localaddr))‹0) { Error_Code("create_socket:bind()"); возврат -1; }
затем я связываюсь с сервером.
// соединение с сервером
sendto(sockfd,pBuffer,sizeof(nMessageType),0,(const sockaddr *)&config.serverAddr,size);
сервер отслеживает другого подключенного однорангового узла. Как только одноранговый узел подключается к серверу, он возвращает IP-адрес и порт другого однорангового узла. Таким образом, одноранговый узел может использовать IP-адрес и порт для прямого подключения к другому одноранговому узлу. но я получаю сообщение об ошибке при отправке данных другому узлу
// отправка данных пиру
int ret = sendto(sockfd,sendBuf, sizeof(nMessagetype),0,(const sockaddr *)&m_peer.publicaddr,sockAddLen); он возвращает ошибку 10047 WSAEAFNOSUPPORT.
Здесь я использую один и тот же сокет для связи с сервером и другим партнером, в чем причина этого? Я не понимаю, что здесь происходит не так. Он может правильно подключиться к серверу, но не может подключиться к другому узлу.