Я работаю над усовершенствованной клиент-серверной программой, где я отправляю коды джойстика (кнопки, которые были нажаты) на сервер. Поскольку я посылаю несколько кодов джойстика, в одном отрывке моего кода на C++ мне нужно повторить сегмент кода клиента.Клиент C++ не отправляет на сервер/Winsock
Я думал о вызове функции каждый раз, когда мне есть что отправить.
клиент несильно:
int client()
{
// Initialize Winsock.
WSADATA wsaData;
int iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
if (iResult != NO_ERROR) {
MessageBox(NULL, TEXT("Winsock initialization, done unsuccessfully"), TEXT("Diploma thesis"), MB_ICONERROR | MB_OK);
return 1;
}
// Create a socket for connecting to server.
SOCKET ConnectSocket;
ConnectSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (ConnectSocket == INVALID_SOCKET) {
MessageBox(NULL, TEXT("Socket creation for connecting to server, done unsuccessfully"), TEXT("Diploma thesis"), MB_ICONERROR | MB_OK);
WSACleanup();
return 1;
}
// The sockaddr_in structure specifies the address family,
// IP address, and port of the server to be connected to.
sockaddr_in Service;
memset(&Service, 0, sizeof(Service));
Service.sin_family = AF_INET;
Service.sin_addr.s_addr = inet_addr("127.0.0.1");
Service.sin_port = htons(5004);
// Connect to server.
iResult = connect(ConnectSocket, (SOCKADDR *) &Service, sizeof (Service));
if (iResult == SOCKET_ERROR) {
iResult = closesocket(ConnectSocket);
MessageBox(NULL, TEXT("Connection with server, done unsuccessfully"), TEXT("Diploma thesis"), MB_ICONERROR | MB_OK);
WSACleanup();
return 1;
}
Как вы уже заметили, сегмент кода клиента, не включает в себя функцию отправки. Это потому, что, как я уже сказал, я не посылаю всегда одну и ту же переменную char. В зависимости от кнопки, которая была нажата, есть другой символ для отправки. Например:
сегмента кода (отправка кнопки А и O):
client();
if (send(ConnectSocket, c_szText1, sizeof(c_szText1), 0) == SOCKET_ERROR)
{MessageBox(NULL, TEXT("The message could not be sent"), TEXT("Diploma thesis"), MB_ICONERROR | MB_OK);}
}
client();
if (send(ConnectSocket, c_szText2, sizeof(c_szText2), 0) == SOCKET_ERROR)
{MessageBox(NULL, TEXT("The message could not be sent"), TEXT("Diploma thesis"), MB_ICONERROR | MB_OK);}
}
Однако, отправь функция терпит неудачу с SOCKET_ERROR. Почему это происходит? Любая помощь будет оценена по достоинству.
Используйте WSAGetLastError, чтобы получить дополнительную информацию о ошибке сокетов. Как объявляются c_szText1 и c_szText2? –
Поскольку клиент - это приложение Windows, я не знаю, могу ли я включить WSAGetLastError в MessageBox. Я буду искать его. c_szText1 и c_szText2 объявляются как char. – dempap