HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Технические вопросы (https://hlfx.ru/forum/forumdisplay.php?forumid=20)
-- Для тех кто знаком с Winsock (https://hlfx.ru/forum/showthread.php?threadid=1560)
Отправлено ToMMuK 28-10-2008 в 17:30:
Для тех кто знаком с Winsock
Собственно нашёл исходник сервера и клиента, которые передаю сообщения. Задумка заключаеться в том что сервер стоит на удалённом компьютере, а клиент запускаеться на любом другом, В общем нужно зделать так чтобы сервер закрывал соединение по порту например 44405 если нету связи с клиентом но ИП коннектиться на этот ИП, а если связь есть с клиентом то разрешал...
Код клиента :
C++ Source Code:
10 | //error trapping signals |
25 | cout<<"EXIT SIGNAL :"<<s; |
30 | void s_cl(char *a, int x) |
39 | SetConsoleTitle(".:: Basic Echo Client By KOrUPt 07 ::. "); |
44 | char RecvdData[100] = ""; |
51 | signal(SIGINT,s_handle); |
52 | signal(SIGKILL,s_handle); |
53 | signal(SIGQUIT,s_handle); |
59 | ser.sin_family=AF_INET; |
60 | ser.sin_port=htons(55902); //Set the port |
61 | ser.sin_addr.s_addr=inet_addr("83.99.185.51"); //Set the address we want to connect to |
63 | memcpy(&addr,&ser,sizeof(SOCKADDR_IN)); |
65 | res = WSAStartup(MAKEWORD(1,1),&data); //Start Winsock |
68 | s_cl("WSAStarup failed",WSAGetLastError()); |
70 | sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); //Create the socket |
71 | if(sock==INVALID_SOCKET ) |
72 | s_cl("Invalid Socket ",WSAGetLastError()); |
73 | else if(sock==SOCKET_ERROR) |
74 | s_cl("Socket Error)",WSAGetLastError()); |
76 | cout<<"Socket Established"<<endl; |
80 | res=connect(sock,&addr,sizeof(addr)); //Connect to the server |
83 | s_cl("SERVER UNAVAILABLE",res); |
87 | memcpy(&ser,&addr,sizeof(SOCKADDR)); |
91 | res = send(sock,buf,sizeof(buf),0); |
93 | ret = recv(sock,RecvdData,sizeof(RecvdData),0); |
100 | cout << RecvdData << endl; |
106 | cout<<"\nEnter message to send ->\n"; |
107 | fgets(buf,sizeof(buf),stdin); |
111 | //res = send(sock,buf,sizeof(buf),0); |
115 | //0==other side terminated conn |
116 | printf("\nSERVER terminated connection\n"); |
122 | else if(res==SOCKET_ERROR) |
125 | printf("Socket error\n"); |
131 | ret = recv(sock,RecvdData,sizeof(RecvdData),0); |
134 | cout<<endl<<RecvdData; |
135 | strcpy(RecvdData,""); |
Код сервера :
C++ Source Code:
8 | // our thread for recving commands |
9 | DWORD WINAPI receive_cmds(LPVOID lpParam) |
11 | printf("AntiHack -> server -> thread created\r\n"); |
13 | // set our socket to the socket passed in as a parameter |
14 | SOCKET current_client = (SOCKET)lpParam; |
16 | // buffer to hold our recived data |
18 | // buffer to hold our sent data |
26 | res = recv(current_client,buf,sizeof(buf),0); // recv cmds |
32 | MessageBox(0,"error","error",MB_OK); |
33 | closesocket(current_client); |
37 | if(strstr(buf,"hello")) |
39 | printf("\nAntiHack -> recieved -> %s",buf); |
41 | strcpy(sendData,"\nAntiHack -> recieved -> O.K\n"); |
43 | send(current_client,sendData,sizeof(sendData),0); |
44 | printf("\nAntiHack -> sended -> O.K\n"); |
47 | else if(strstr(buf,"1384748973")) |
49 | printf("\nAntiHack -> recieved -> %s",buf); |
51 | strcpy(sendData,"\nAntiHack -> recieved -> O.K\n"); |
53 | send(current_client,sendData,sizeof(sendData),0); |
54 | printf("\nAntiHack -> sended -> O.K\n"); |
60 | strcpy(sendData,"Invalid cmd\n"); |
62 | send(current_client,sendData,sizeof(sendData),0); |
73 | printf("AntiHack -> server -> starting\r\n"); |
75 | // our masterSocket(socket that listens for connections) |
85 | int ret = WSAStartup(0x101,&wsaData); // use highest version of winsock avalible |
92 | // fill in winsock struct ... |
93 | server.sin_family=AF_INET; |
94 | server.sin_addr.s_addr=INADDR_ANY; |
95 | server.sin_port=htons(55902); // listen on telnet port 55902 |
97 | printf("AntiHack -> listening port # : 55902\r\n"); |
101 | sock=socket(AF_INET,SOCK_STREAM,0); |
103 | if(sock == INVALID_SOCKET) |
108 | // bind our socket to a port(port 55902) |
109 | if( bind(sock,(sockaddr*)&server,sizeof(server)) !=0 ) |
114 | // listen for a connection |
115 | if(listen(sock,5) != 0) |
120 | // socket that we snedzrecv data on |
124 | int fromlen = sizeof(from); |
133 | // accept connections |
134 | client = accept(sock,(struct sockaddr*)&from,&fromlen); |
135 | printf("AntiHack -> client -> connected\r\n"); |
137 | printf("AntiHack -> client -> # : %d\n",schit); |
139 | // create our recv_cmds thread and parse client socket as a parameter |
140 | CreateThread(NULL, 0,receive_cmds,(LPVOID)client, 0, &thread); |
Гугля не дал никаких результатов.__________________
Сайт латвийского мода
Игроки в халф лайф делятся на две больше группы - те, кто не доехал на поезде и те, кто прошел несколько раз.