2013-12-09 1 views
0

에코 서버와 세 대의 클라이언트가 있습니다. 필요한 것은 각 클라이언트가 서버로 데이터를 보낼 수 있으며 각 데이터는 서버의 세 가지 다른 터미널에 인쇄된다는 것입니다. .TCP/IP 에코 서버에있는 세 개의 원격 터미널에 인쇄

이것이 가능한지, 그렇게하기 위해 사용해야하는 추가 기능이 궁금합니다. 나는 내가 사용할 수있는 요소에 대한 방향을 원한다.

나는 CentOS가있는 4 대의 컴퓨터와 C 언어로 작업하고 있습니다. 여기 내 두 프로그램의 코드 (I 오류 처리 코드를 omite) 인 :

클라이언트 프로그램 :

int main(int argc, char *argv[]) 
{ 
    int clientSocket,remotePort,status=0; 
    struct sockaddr_in ServerName={0}; 
    char buffer[256]=""; 
    char *remoteHost=NULL; 
    remoteHost=argv[1]; 
    remotePort=atoi(argv[2]); 
    clientSocket= socket(PF_INET,SOCK_STREAM,IPPROTO_TCP); 
    ServerName.sin_family=AF_INET; 
    ServerName.sin_port=htons(remotePort); 
    ServerName.sin_addr.s_addr=inet_addr=(remoteHost); 
    status=connect(clientSocket,(struct sockaddr *)&ServerName,sizeof(ServerName)); 
    while(strcmp(buffer,"exit")) 
    { 
    scanf("%s",buffer); 
    write(clientSocket,buffer,strlen(buffer)); 
    read(clientSocket,buffer,sizeof(buffer)); 
    printf("%s\n",buffer); 
    } 
} 

서버 프로그램 : 나는 두 가지 옵션을 발견

#define BACK_LOG 5 
int main(int argc, char *argv[]) 
{ 
    int serverSocket=0,status=0,clientSocket=0,longitud=0,port; 
    char buffer[256]=""; 
    struct sockaddr_in serverName,clientName; 
    buffer[0]='\0'; 
    port=atoi(argv[1]); 
    serverSocket=socket(AF_INET,SOCK_STREAM,0); 
    serverName.sin_family=AF_INET; 
    serverName.sin_port=htons(port); 
    serverName.sin_addr.s_addr=htonl(INADDR_ANY); 
    status=bind(serverSocket,(struct sockaddr *)&serverName, sizeof(serverName)); 
    status=listen(serverSocket,BACK_LOG); 
    int clientLength = sizeof(clientName); 
    clientSocket=accept(serverSocket,(struct sockaddr *)&clientName, &clientLength); 
    while(read(clientSocket,buffer,sizeof(buffer))!=0) 
    { 
    longitud=strlen(buffer); 
    printf("%s %i\n",buffer,strlen(buffer)); 
    write(clientSocket,buffer,longitud); 
    strncpy(buffer,buffer,longitud+1); 
    } 
    close(serverSocket); 
} 
+1

'select' 시스템 호출을 찾으십시오. – Xymostech

+0

고마워, 나는 두 가지 옵션을 발견했다 :'select'를 사용하고'threads '를'pthread'와 함께 사용하는 것은 에코 서버에서 다중 연결을 처리하는 좋은 방법이다. – Richard

답변

0

: 선택을 사용하여 pthread와 함께 쓰레드를 사용하는 것은 에코 서버에서 다중 연결을 처리하는 좋은 방법이다. - Richard

관련 문제