Я создаю сокет для отправки целого числа из игры GTA-5 клиенту Python через неблокирующий сокет. Когда я запускаю сокеты с тестовыми данными (не в игре), он работает отлично. Но при запуске в игре клиент просто печатает «Подключено к серверу» и данные не принимаются. В чем может быть проблема? Как мне это исправить?
Код на стороне сервера
bool serverSocket (int reward) {
int s;
struct sockaddr_in servAddr;
struct sockaddr_in clntAddr;
int clntAddrLen; //length of client socket address
WSADATA mywsadata; //your wsadata struct, it will be filled by WSAStartup
WORD DllVersion = MAKEWORD(2, 1);
if (WSAStartup(DllVersion, &mywsadata) != 0) { //DllVeersion refers to version of sockets we want to use.
return 0;
}
//Build local (server) socket add
servAddr.sin_family = AF_INET;
servAddr.sin_port = htons(SERVER_PORT);
servAddr.sin_addr.s_addr = INADDR_ANY;
//create socket
s = socket(AF_INET, SOCK_STREAM, 0);
if (s <0)
{
return 0;
}
//bind socket to local address and port
if ((bind(s, (struct sockaddr*)&servAddr, sizeof(servAddr))<0))
{
return 0;
}
//set socket in a state where it listens for incoming connections
if (listen(s, 10) <0) {
return 0;
}
SOCKET client = SOCKET_ERROR;
// Set listen socket to non blocking mode
u_long mode = 1; //any non zero no. sets it to non blocking mode
ioctlsocket(s, FIONBIO, &mode);
FD_SET readfds;
FD_ZERO(&readfds);
FD_SET(s, &readfds);
timeval timeperiod;
timeperiod.tv_usec = 5;
select(0, &readfds, NULL, NULL, &timeperiod);
if (FD_ISSET(s, &readfds)) {
client = accept(s, NULL, NULL);
if (client == SOCKET_ERROR) {
return 0;
}
FD_SET(client, &readfds);
}
if (FD_ISSET(client, &readfds)) {
char reward[20] = "server msg";
int32_t r = 100;
std::string r_str = std::to_string(r);
char buffer[6];
strncpy_s(buffer, r_str.c_str(), sizeof(buffer));
//send string
send(client, (char*)&buffer, sizeof(buffer), 0);
}
closesocket(s);
return 1;
}
Код на стороне клиента
HOST, PORT ='localhost', 50007
def get_data():
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
print("connected to Server")
data = s.recv(6)
print(data)
data = data.partition(b'\x00',)[0]
data = data.decode('utf-8')
print(int(data))
s.close()
if __name__ == '__main__':
get_data()