|
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
| Компьютерный форум OSzone.net » Linux и FreeBSD » Программирование в *nix » Не могу отправить сообщение |
|
|
Не могу отправить сообщение
|
|
Новый участник Сообщения: 3 |
Здравствуйте! Пытаюсь написать чат на С под 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 | |
|