Не могу передать сообщение
От: algoritm256  
Дата: 19.12.12 16:23
Оценка:
Здравствуйте! Проблема такая: пишу чат на С под Linux. Чат состоит из двух компонентов: клиент и сервер. Клиент пишет сообщение и передает серверу, а сервер должен это сообщение напечатать, но, по неизвестной, к сожалению, мне причине, сервер сообщение не получает. Подскажите пожалуйста в чем моя ошибка! Заранее большое спасибо!

сервер:


#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 (st, 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);
}


P.S.
Сильно пожалуйста не ругайте, сетевые приложения создаю первый раз
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.