Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Linux и FreeBSD » Программирование в *nix » Не могу отправить сообщение

Ответить
Настройки темы
Не могу отправить сообщение

Аватара для Rino256

Новый участник


Сообщения: 3
Благодарности: 0


Конфигурация

Профиль | Отправить 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

 

Аватара для Rino256

Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить 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);
}
P.S.
порт вводил 12345. На Debian работало

Отправлено: 17:33, 25-12-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.



Компьютерный форум OSzone.net » Linux и FreeBSD » Программирование в *nix » Не могу отправить сообщение

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - Как убрать окно "отправить сообщение об ошибке"? 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




 
Переход