Я только что переместил код сокета из Linux в Windows. После некоторых изменений, чтобы заставить код работать в Windows, мой клиент, кажется, ждет у функции accept и не получает мои данные с сервера.Застрял при приеме сокета
Кодекс для моей версии клиента
WSADATA wsa;
SOCKET sock = 0;
struct sockaddr_in server;
packageLength = 64;//We don't need more to get all the information
char * buffer = new char[packageLength];
if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0) { this->Die("Failed to WSA startup");}
if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) {
this->Die("Failed to create socket");
}
memset(&server, 0, sizeof(server));
server.sin_family = AF_INET;
server.sin_addr.s_addr = INADDR_ANY;
server.sin_port = htons(55555);
if (bind(sock, (struct sockaddr *) &server, sizeof(server)) == SOCKET_ERROR) {
this->Die("Failed to bind the server socket");
}
if (listen(sock, 1) < 0) {
this->Die("Failed to listen on server socket");
}
SOCKET clientSocket = 0;
struct sockaddr_in client;
int size = sizeof(sockaddr_in);
std::cout << "Waiting for server" << std::endl;
clientSocket = accept(sock, (struct sockaddr *) &client, &size); //Stands here and wait
if (clientSocket == INVALID_SOCKET) {
this->Die("Failed to accept client");
}
//Never reach here
std::cout << "Server accepted" << std::endl;
И код для серверной стороны
WSADATA wsa;
SOCKET sock = 0;
struct sockaddr_in sender;
char* buffer = new char[this->packageLength];
if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0) {
this->Die("Failed to WSA startup");
}
if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) {
printf("Could not create socket : %d", WSAGetLastError());
this->Die("Failed to create socket");
}
memset(&sender, 0, sizeof(sender));
sender.sin_family = AF_INET;
sender.sin_addr.s_addr = inet_addr(ip.c_str());
sender.sin_port = htons(this->port);
//Connect to the recevier
if (bind(sock, (struct sockaddr *) &sender, sizeof(sender)) == SOCKET_ERROR) {
this->Die("Failed to connect to recevier");
}
//Send all data
int amountLeft = (int)amount;
while (amountLeft > 0) {
//Send on chunk of data. //Packagesize is actually the size of the data portion
std::cout << "Sent" << std::endl;
send(sock, data, strlen(data), 0);
amountLeft -= packageLength;
}
std::cout << "All data is sent, socket is now closed" << std::endl;
Сервер отправляет данные, но клиент не получает его. Я проверил так, что порты правильные, и это локальный хост, поэтому используется IP-адрес 127.0.0.1
Почему клиент 'listen' &' accept'? И почему никто из них не «соединяется»? – Amit