exit(-1); }
//child fork if(pid==0) {
ppid=getppid();
printf(\
while(strncmp(msg.buf,\ { msg.type = NOR;
fgets(msg.buf,sizeof(msg.buf),stdin);
sendto(sockfd,&msg,sizeof(msg),0,(struct sockaddr *)&addrs,sizeof(addrs)); }
msg.type = QUIT;
sendto(sockfd,&msg,sizeof(msg),0,(struct sockaddr *)&addrs,sizeof(addrs));
sleep(1);
kill(ppid,SIGKILL); exit(0); }
else//father fork {
while(1) {
memset(&def,0,sizeof(def));
recvfrom(sockfd,&def,100,0,NULL,NULL); printf(\ } } }
#include
#define NOR 3 #define QUIT 2
typedef struct {
int type;
char name[20]; char buf[1024];
}message;
int main(int argc,char *argv[]) {
message msg,def; pid_t pid; pid_t ppid; int sockfd;
struct sockaddr_in addrs;
if ((sockfd = socket (PF_INET,SOCK_DGRAM,0))<0) {
perror(\ exit(-1); }
memset(&addrs,0,sizeof(addrs)); addrs.sin_family = PF_INET;
addrs.sin_addr.s_addr = inet_addr(argv[1]); addrs.sin_port = htons(atoi(argv[2]));
if(connect(sockfd,(struct sockaddr *)&addrs,sizeof(addrs))<0) {
perror(\ exit(-1); }
//send login message msg.type=LOG;
strcpy(msg.name,\ strcpy(msg.buf,\
sendto(sockfd,&msg,sizeof(msg),0,(struct sockaddr *)&addrs,sizeof(addrs));
memset(&msg,0,sizeof(msg));
recvfrom(sockfd,&msg,sizeof(msg),0,NULL,NULL); printf(\
//creat fork
if((pid = fork())<0) {
perror(\ exit(-1); }
//child fork if(pid==0) {
ppid=getppid();
printf(\
while(strncmp(msg.buf,\ { msg.type = NOR;
fgets(msg.buf,sizeof(msg.buf),stdin);
sendto(sockfd,&msg,sizeof(msg),0,(struct sockaddr *)&addrs,sizeof(addrs)); }
msg.type = QUIT;
sendto(sockfd,&msg,sizeof(msg),0,(struct sockaddr *)&addrs,sizeof(addrs));
sleep(1);
kill(ppid,SIGKILL); exit(0); }
else//father fork {
while(1) {
memset(&def,0,sizeof(def));
recvfrom(sockfd,&def,100,0,NULL,NULL); printf(\ } } }