![]() |
|
Модераторы: feodorv |
![]()
|
|
| bamper2 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 17.3.2008 Репутация: нет Всего: нет |
Программа представляет собой клиентской приложени echo под UDP.
Вопрост такой: когда запускаю экзешник и ввожу ип адрес сервера 127.0.0.1 то возвращается тоже самое эхо которое ввел, хотя при этом программа сервер не работает на компе. Как такое может быть? #include <winsock2.h> #include <sys/types.h> #include <stdio.h> #include <_str.h> //для функции strlen main() { WSADATA wsaData; WSAStartup(MAKEWORD(2,2), &wsaData); int s, a=0; char buf[1024]; char ip[32]; printf("Zdrastvuite\n"); printf("Vvedite adres servera:"); scanf("%s",&ip); //gets(ip); printf("Vvedite slovo:"); //gets(buf); scanf("%s",&buf); s=socket(AF_INET, SOCK_DGRAM, 0); struct sockaddr_in { short int sin_family; unsigned short int sin_port; struct in_addr{ unsigned long addr;} sin_addr; unsigned char sin_zero[1024]; }; struct sockaddr_in serv; serv.sin_family=AF_INET; serv.sin_port=htons(13); serv.sin_addr.addr=inet_addr(ip); bind(s, (struct sockaddr *)&serv, sizeof(serv)); //int boom=sizeof (serv); int fromlen1; a=sendto(s, buf, strlen (buf), 0, (struct sockaddr*)&serv, sizeof(serv)); struct sockaddr_in serv_adr; int server_adr_size=sizeof (serv_adr); //char buf1[1024]; //scanf("%s",&buf1); fromlen1=recvfrom(s, buf1, sizeof(buf1), 0,(struct sockaddr*)&serv_adr, &server_adr_size ); printf("Port=%d\n",IPPORT_ECHO); printf("Port=%d\n",htons(IPPORT_ECHO)); printf("IP=%s\n",ip); printf("IP=%d\n",inet_addr(ip)); printf("Byte otpravleno:=%d\n", a); printf("Byte polycheno:=%d\n", fromlen1); printf("ECHO=%s\n",buf1); scanf("%s",&ip); closesocket(s); WSACleanup(); } |
|||
|
||||
| sergu |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 19.9.2006 Репутация: нет Всего: нет |
Дружище! Дело в том, что протокол UDP работает без установления соединения. Что это значит? А то, что клиенту нет необходимости вызывать функцию Connect. Он может сразу посылать и принимать пакеты. В твоем случае - это скорее не клиент, а сервер, который шлет сам себе сообщение
Т.е. получается, что ты отправляешь строку sendto(s, buf, strlen (buf), 0, (struct sockaddr*)&serv, sizeof(serv)); сокету s, котрый на ходится по адресу 127.0.0.1 и на порту 13, а потом принимаешь recvfrom(s, buf1, sizeof(buf1), 0,(struct sockaddr*)&serv_adr, &server_adr_size ); с того же самого сокета. Т.е. ты отправил себе же сообщение. В общем советую тебе почитать статью http://www.citforum.ru/book/cook/winsock.shtml Там русским по белому все расписано и прведены примеры udp и tcp клиентов и эхо серверов. |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Сети | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |