Здравствуйте народ, я решил написать монитор для серверов Conter Strike сделал небольшую программку UDP клиент с использованием сокетов. Проблема состоит в том что строка
| Код | printf("S=>C: %s", &buff [0]); |
должна выводить содержимое принятого пакета, но вместо этого выводит IP отправителя
| Код | #include<stdio.h> #include<string.h> #include<winsock2.h> #include<windows.h>
#define PORT 27015 #define SERVERADDR "10.207.112.107"
int main ( int argc, char* argv [ ] ) { char buff [ 10*1024 ]; printf (" UDP Client \n"); //Ïîäêëþ÷åíèå áèáëèîòåêè if (WSAStartup ( 0x202, ( WSADATA *) &buff [ 0 ] )) { printf (" WSAStartup error: %d\n ", WSAGetLastError ( ) ); return -1; } //Ñîçäàíèå ñîêåòà SOCKET name_sock=socket ( AF_INET, SOCK_DGRAM, 0 ); if ( name_sock==INVALID_SOCKET ) { printf (" socket ( ) error: %d \n ", WSAGetLastError ( ) ); WSACleanup ( ); return -1; } //Îáìåí ñîîáùåíèé ñ ñåðâåðîì HOSTENT *hst; sockaddr_in dest_addr;
dest_addr.sin_family=AF_INET; dest_addr.sin_port=htons ( PORT ); //Îïðåäåëåíèå IP-àäðåñà óçëà if (inet_addr ( SERVERADDR )) dest_addr.sin_addr.s_addr=inet_addr ( SERVERADDR ); else if ( hst=gethostbyname ( SERVERADDR )) dest_addr.sin_addr.s_addr=((unsigned long **) //ôóíêöèÿ gethostbyname îæèäàåò íà âõîäå ÒÎËÜÊÎ äîìåííûå èìåíà hst->h_addr_list)[0][0]; else { printf ("Unknown host: %d \n", WSAGetLastError ( )); closesocket ( name_sock ); WSACleanup ( ); return -1; } while (1) { //×òåíèå ñîîáùåíèÿ ñ êëàâèàòóðû // printf (""); fgets (&buff [0], sizeof (buff) -1, stdin); // if (!strcmp(&buff [0], "quit \n")) break;
char cbuff[100] = "ÿÿÿÿTSource Engine Query";
//ïåðåäà÷à ñîîáùåíèé íà ñåðâåð sendto(name_sock, &cbuff [0], strlen ( &cbuff [0] ), 0,(sockaddr *) &dest_addr, sizeof(dest_addr)); //Ïðèåì ñîîáùåíèé ñ ñåðâåðà sockaddr_in server_addr; int server_addr_size=sizeof (server_addr);
int n=recvfrom (name_sock, &buff [0], sizeof(buff)-1,0,(sockaddr *) &server_addr, &server_addr_size); if ( n==SOCKET_ERROR) { printf ("recvfrom ( ) error: %d\n", WSAGetLastError ( ) ); closesocket(name_sock); WSACleanup ( ); return -1; } buff [n]=0; //Âûâîä ïðèíÿòîãî ñîîáùåíèÿ ñ ñåðâåðà íà ýêðàí printf("S=>C: %s", &buff [0]); } //Âûõîä closesocket (name_sock); WSACleanup ( ); return 0; }
|
|