2013-12-09 37 views
0

我有一個回顯服務器和三個客戶端,我需要的是每個客戶端都可以將數據發送到服務器,並且每個數據都可以打印在服務器的三個不同終端。在TCP/IP回顯服務器上的三個遠程終端上打印

我想知道這是否可能以及我需要使用哪些附加功能來實現。我只需要確定我可以使用哪些元素就可以獲得我想要的東西。

我正在用C語言和四臺CentOS電腦。這裏是我的兩個方案的代碼(我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',是處理echo服務器中多個連接的好方法。 – Richard

回答

0

我已經發現了兩個選項:使用select和在pthread中使用線程是處理echo服務器中多個連接的好方法。 - Richard