Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Аватара для 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