#include
typedef struct node {
struct sockaddr_in addrc; struct node *next; }linknode,*linklist;
typedef struct { int type;
char name[20]; char buf[1024];
}message;
linklist CREAT();
int main(int argc, char *argv[]) {
message msg; int sockfd; socklen_t slen;
struct sockaddr_in addrs,addrc; linklist h,p,q;
h=CREAT();
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(\ addrs.sin_port = htons(8888);
if (bind(sockfd,(struct sockaddr *)&addrs,sizeof(addrs)) <0 ) {
perror(\ exit(-1);
}
while(1) {
slen = sizeof(addrc);
recvfrom (sockfd,&msg,sizeof(msg),0,(struct sockaddr *)&addrc,&slen); printf(\ if (msg.type == LOG) {
linklist m; m = h->next; p=CREAT(); h->next=p; p->next=m;
p->addrc = addrc;
printf(\
from %s %d\\n\
q=h->next;
while (q!=NULL) {
strcpy(msg.buf,msg.name); strcat(msg.buf,\
sendto(sockfd,&msg,sizeof(msg),0,(struct *)&q->addrc,sizeof(q->addrc));
q=q->next;
}
}
sockaddr
if (msg.type == NOR) {
q=h->next; while(q!=NULL) {
sendto(sockfd,&msg,sizeof(msg),0,(struct sockaddr *)&q->addrc,sizeof(q->addrc)); q=q->next; } }
if(msg.type == QUIT) {
strcpy(msg.buf,\
sendto(sockfd,&msg,sizeof(msg),0,(struct sockaddr *)&addrc,sizeof(addrc));
delete(addrc,h);
strcpy(msg.buf,msg.name); strcat(msg.buf,\ q=h->next;
while(q!=NULL) {
sendto(sockfd,&msg,sizeof(msg),0,(struct sockaddr *)&q->addrc,sizeof(q->addrc)); q=q->next; } } }
return 0; }
linklist CREAT() {
linklist p;
p=(linklist)malloc(sizeof(linknode)); p->next=NULL;
return p; }
int delete(struct sockaddr_in addrc,linklist ls) {
linklist m,n,p; m=ls->next; p=ls;
if (memcmp(&m->addrc,&addrc,sizeof(addrc))==0) {
n=m->next; p->next=n; free(m); }
m=m->next; p=p->next; }
#include
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(\