#include #include #include #include #include #include #include #include #define MAXLINE 1024 int readline(int,char *,int); char *escapechar = "exit\n"; int main(int argc,char *argv[]){ char line[MAXLINE],sendline[MAXLINE],recvline[MAXLINE+1]; char *haddr; int n,size,comp,port; pid_t pid; static int s; static struct sockaddr_in server_addr; if(argc<3){ printf("Usang: talk_client server_ip_addr port_number"); return -1; } else{ haddr = argv[1]; port = atoi(argv[2]); } if( (s=socket(PF_INET,SOCK_STREAM,0)) < 0 ){ printf("Client: Can't open stream socket.\n"); return -1; } bzero((char *)&server_addr,sizeof(server_addr)); server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = inet_addr(haddr); server_addr.sin_port = htons(port); if( connect(s,(struct sockaddr *)&server_addr,sizeof(server_addr)) < 0 ){ perror("\n========== Client : can't connect to server. ==========\n\n"); return -1; } else{ printf("\n========== Client : Server connected ==========\n\n"); } if((pid=fork())>0){ while(readline(0,sendline,MAXLINE) != 0){ size=strlen(sendline); if(write(s,sendline,strlen(sendline)) != size){ printf("Client: can't write to server.\n"); return -1; } if(strncmp(sendline,escapechar,4) == 0){ kill(pid,SIGQUIT); break; } } } else if(pid ==0){ while(1){ if((size=read(s,recvline,MAXLINE))>0){ recvline[size] = '\0'; if(strncmp(recvline,escapechar,4)==0){ kill(getppid(),SIGQUIT); break; } printf("Server : %s",recvline); } } } printf("========== Bye Bye ==========\n\n"); close(s); return 0; } int readline(int fd,char *ptr,int maxlen){ int n,rc; char c; for(n=1;n