Я создал две программы с Winsock, серверную программу и клиентскую программу. Когда я выполняю их на моем компьютере с Windows (в разных окнах cmd), я могу получить сообщение от клиента. Когда я пытаюсь запустить клиент на другом компьютере, я получаю сообщение о том, что сокет был успешно создан, но сообщение не отправляется. Вместо этого сервер просто продолжает слушать, пока клиент больше не отвечает. Нет кода ошибки (даже не истекло время ожидания или что-то в этом роде).
Я пытался изменить номер порта (с какого-то случайного порта на порт 80), но это не помогло. Я также выключил брандмауэр на стороне сервера и на стороне клиента, но это тоже не помогло.
Мой код для клиента:
#include <winsock2.h>
#include <stdio.h>
#include <iostream>
int startWinsock(void);
int main()
{
long rc;
SOCKET s;
char buf[250] = "HELLO";
SOCKADDR_IN addr;
rc=startWinsock();
if(rc!=0){
printf("Error: startWinsock, error code: %d\n",rc);
return 1;
}
else{
printf("Winsock started!\n");
}
s=socket(AF_INET,SOCK_STREAM,0);
if(s==INVALID_SOCKET){
printf("Error: Could not create Socket: %d\n",WSAGetLastError());
return 1;
}
else{
printf("Socket created!\n");
}
memset(&addr,0,sizeof(SOCKADDR_IN)); // initialise to 0
addr.sin_family=AF_INET;
addr.sin_port=htons(80);
addr.sin_addr.s_addr=inet_addr("myip"); // address is the IP adress of the PC where the server program runs
rc=connect(s,(SOCKADDR*)&addr,sizeof(SOCKADDR));
if(rc==SOCKET_ERROR){
printf("Error: could not connect: %d\n",WSAGetLastError());
return 1;
}
else{
printf("conected");
}
rc=send(s,buf,strlen(buf),0);
}
buf[rc]='\0';
closesocket(s);
WSACleanup();
return 0;
}
int startWinsock(void)
{
WSADATA wsa;
return WSAStartup(MAKEWORD(2,0),&wsa);
}
и на стороне сервера:
#include <windows.h>
#include <winsock2.h>
#include <stdio.h>
int startWinsock(void);
int main()
{
long rc;
char buf[250];
SOCKET acceptSocket;
SOCKET connectedSocket;
SOCKADDR_IN addr;
rc=startWinsock();
if(rc!=0){
printf("Error startWinsock: %d\n",rc);
return 1;
}
else
{
printf("Winsock started!\n");
}
acceptSocket=socket(AF_INET,SOCK_STREAM,0);
if(acceptSocket==INVALID_SOCKET){
printf("Error: Could not create Socket: %d\n",WSAGetLastError());
return 1;
}
else{
printf("Socket created!\n");
}
memset(&addr,0,sizeof(SOCKADDR_IN));
addr.sin_family=AF_INET;
addr.sin_port=htons(80);
addr.sin_addr.s_addr=ADDR_ANY;
rc=bind(acceptSocket,(SOCKADDR*)&addr,sizeof(SOCKADDR_IN));
if(rc==SOCKET_ERROR){
printf("Error: bind: %d\n",WSAGetLastError());
return 1;
}
else{
printf("Socket binded to port 80\n");
}
rc=listen(acceptSocket,10);
if(rc!=0){
printf("Error: listen: %d\n",WSAGetLastError());
return 1;
}
else{
printf("acceptSocket in listen mode....\n");
}
connectedSocket=accept(acceptSocket,NULL,NULL);
if(connectedSocket==INVALID_SOCKET){
printf("Error: accept: %d\n",WSAGetLastError());
return 1;
}
else{
printf("New connection accepted!\n");
}
rc=recv(connectedSocket,buf,250,0);
buf[rc]='\0';
printf("Client sendet: %s\n",&buf);
closesocket(acceptSocket);
closesocket(connectedSocket);
WSACleanup();
return 0;
}
int startWinsock(void)
{
WSADATA wsa;
return WSAStartup(MAKEWORD(2,0),&wsa);
}