|
Компьютерный форум OSzone.net » Linux и FreeBSD » Программирование в *nix » Не могу отправить сообщение |
|
Не могу отправить сообщение
|
Новый участник Сообщения: 3 |
Профиль | Отправить PM | Цитировать Здравствуйте! Пытаюсь написать чат на С под Linux. Имеется клиент и сервер. В клиенте вводится сообщения и отправляется на сервер, а сервер это сообщение должен распечатать, но к сожалению, по неизвестной мне причине, сообщение не отправляется! Помогите пожалуйста с решить данную проблему! P.S. отправляю сообщение с помощью сокетов. Это мое первая программа, работающая с сетью, так что прошу сильно не ругать, если где-то туплю
Сервер: #include <sys/types.h> #include <sys/socket.h> #include <stdio.h> #include <stdlib.h> #include <arpa/inet.h> int main() { int st = socket(AF_INET,SOCK_STREAM,0); if (st<0) { perror("socket"); exit(-1); } struct sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_port = htons(1501); addr.sin_addr.s_addr = INADDR_ANY; int bnd = bind(st,(struct sockaddr*)&addr,sizeof(addr)); if(bnd<0) { perror("bind"); exit(-1); } int lst; lst = listen(st,10); struct sockaddr_in addr1; int st1, stlen1; st1 = accept(st,(struct sockaddr*)&addr1,&stlen1); if(st1==NULL) { perror("st1"); exit(-1); } int snd; int from_len=0; char str[80]=""; printf("Message0: %s \n", str); while(1) { if((from_len = recv (st1, str, 80, 0))<0) { perror("recv"); //exit(-1); } printf("From_len: %d\n", from_len); write (1, str, 80); printf("Message: %s \n", str); //send (st1, str, 80, 0); sleep(4); } shutdown(st,2); //shutdown(st1,2); close(st); //close(st1); exit(0); } #include <sys/types.h> #include <sys/socket.h> #include <stdio.h> #include <stdlib.h> #include <arpa/inet.h> #include <netdb.h> extern int h_errno; int main() { struct hostent *gethost; gethost = gethostbyname("127.0.0.1"); if(gethost==NULL) { perror("gethostbyname"); exit(-1); } int st = socket(AF_INET,SOCK_STREAM,0); if (st<0) { perror("socket"); exit(-1); } struct sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_port = htons(1501); addr.sin_addr.s_addr = ((struct in_addr*)(gethost->h_addr))->s_addr; int cnct = connect(st,(struct sockaddr*)&addr,sizeof(addr)); if(cnct<0) { perror("connect"); exit(-1); } int snd; //int stlen1=sizeof(addr1); int stlen1; //int st1 = accept(st,(struct sockaddr*)&addr1,&stlen1); char str[80]; while(1) { gets(str); //int from_len = sizeof(addr1); //s_new = accept (s, &from_sin, &from_len); //st1 = accept(st,(struct sockaddr*)&addr1,&stlen1); //(st, str,80); //int from_len = read (st, str, 90); //write (1, str, 80); snd=send(st, str, 80, 0); sleep(4); } shutdown(st,2); //shutdown(st1,2); close(st); //close(st1); //} exit(0); } |
|
Отправлено: 23:06, 19-12-2012 |
Новый участник Сообщения: 3
|
Профиль | Отправить PM | Цитировать Все посылается! Но возникла другая проблема- с совместимостью. На Debian у знакомого все запускается на ура, а у меня что на Ubuntu, что на Fedora 17
пишет ошибку: "st1: Bad address". Пробовал адреса 127.0.0.1 и 192.168.1.3- Ubuntu в сети, 192.168.1.2- Fedora в сети. Подскажите пожалуйста, в чем дело! Клиент: #include <sys/types.h> #include <sys/socket.h> #include <stdio.h> #include <stdlib.h> #include <arpa/inet.h> #include <netdb.h> extern int h_errno; int main(int argC, char** argV) { if(argC < 2) { printf("Enter %s port", argV[0]); exit(-1); } int port; if((port = atoi(argV[1])) < 0) { perror("atoi"); //exit(-1); } struct hostent *gethost; gethost = gethostbyname("192.168.1.3"); if(gethost==NULL) { perror("gethostbyname"); exit(-1); } int st = socket(AF_INET,SOCK_STREAM,0); if (st<0) { perror("socket"); exit(-1); } struct sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_port = htons(port); addr.sin_addr.s_addr = ((struct in_addr*)(gethost->h_addr))->s_addr; int cnct = connect(st,(struct sockaddr*)&addr,sizeof(addr)); if(cnct<0) { perror("connect"); exit(-1); } int snd; //int stlen1=sizeof(addr1); int stlen1; //int st1 = accept(st,(struct sockaddr*)&addr1,&stlen1); char str[80]; while(1) { gets(str); printf("Message: %s\n", str); //int from_len = sizeof(addr1); //s_new = accept (s, &from_sin, &from_len); //st1 = accept(st,(struct sockaddr*)&addr1,&stlen1); //(st, str,80); //int from_len = read (st, str, 90); //write (1, str, 80); snd=send(st, str, 80, 0); if(snd<0) { perror("send"); exit(-1); } sleep(4); } shutdown(st,2); //shutdown(st1,2); close(st); //close(st1); //} exit(0); } #include <sys/types.h> #include <sys/socket.h> #include <stdio.h> #include <stdlib.h> #include <arpa/inet.h> int main(int argC, char** argV) { if(argC < 2) { printf("Enter %s port", argV[0]); exit(-1); } int port; if((port = atoi(argV[1])) < 0) { perror("atoi"); //exit(-1); } int st = socket(AF_INET,SOCK_STREAM,0); if (st<0) { perror("socket"); exit(-1); } struct sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_port = htons(12345); addr.sin_addr.s_addr = INADDR_ANY; int bnd = bind(st,(struct sockaddr*)&addr,sizeof(addr)); if(bnd<0) { perror("bind"); exit(-1); } int lst; lst = listen(st,10); if(lst<0) { perror("listen"); exit(-1); } struct sockaddr_in *addr1; int st1, stlen1; int peer_addr_size = sizeof(struct sockaddr_in); //st1 = accept(st,(struct sockaddr*)addr1,&stlen1); st1 = accept(st,(struct sockaddr*)addr1,&peer_addr_size); if(st1<0) { perror("st1"); exit(-1); } int snd; int from_len=0; char str[80]; printf("Message0: %s \n", str); while(1) { from_len = recv (st1, str, 80, 0); if(from_len<0) { perror("recv"); exit(-1); } printf("From_len: %d\n", from_len); write (1, str, 80); printf("Message: %s \n", str); snd=send (st1, str, 80, 0); sleep(4); } shutdown(st,2); //shutdown(st1,2); close(st); //close(st1); exit(0); } порт вводил 12345. На Debian работало |
Отправлено: 17:33, 25-12-2012 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Разное - Как убрать окно "отправить сообщение об ошибке"? | ivanhoe75 | Microsoft Windows 2000/XP | 1 | 20-11-2011 11:45 | |
FreeBSD - не могу отправить письмо. | Ruslan19891989 | Общий по FreeBSD | 13 | 09-11-2011 22:15 | |
[решено] не могу с одного ящика отправить письмо на один ящик | asci | Хочу все знать | 7 | 22-10-2009 13:01 | |
Не могу отправить почту на определенный домен | Wind001 | Microsoft Exchange Server | 3 | 07-07-2008 16:11 | |
Как отправить бесплатное сообщение на короткий номер...? | _XXX_ | Хочу все знать | 6 | 15-01-2008 05:22 |
|