i have codes connecting , chatting between 1 server 1 client follows:
/*server side*/ #include<stdio.h> #include<sys/types.h> #include<netinet/in.h> #include<string.h> #include<sys/socket.h> #include<stdlib.h> #include<unistd.h> main() { int sd,i,len,bi,nsd,port; char content[30]; struct sockaddr_in ser,cli; if((sd=socket(af_inet,sock_stream,ipproto_tcp))==-1) { printf("\nsocket problem"); return 0; } printf("\nsocket created\n"); bzero((char*)&cli,sizeof(ser)); printf("enter port no:\n"); scanf("%d",&port); printf("\nport address %d\n:",port); ser.sin_family=af_inet; ser.sin_port=htons(port); ser.sin_addr.s_addr=htonl(inaddr_any); bi=bind(sd,(struct sockaddr *)&ser,sizeof(ser)); if(bi==-1) { printf("\nbind error, port busy, plz change port in client , server"); return 0; } i=sizeof(cli); listen(sd,5); nsd = accept(sd,((struct sockaddr *)&cli),&i); if(nsd==-1) { printf("\ncheck description parameter\n"); return 0; } printf("\nconnection accepted!"); if(fork()) { printf("\nenter data send type exit stop:\n"); scanf("%s",content); while(strcmp(content,"exit")!=0) { send(nsd,content,30,0); scanf("%s",content); } send(nsd,"exit",5,0); } else = recv(nsd,content,30,0); while(strcmp(content,"exit")!=0) { printf("\nclient: %s\n",content); i=recv(nsd,content,30,0); } printf("\nbye"); send(nsd,"offline",10,0); close(sd); close(nsd); return 0; } /*client side*/ #include<stdio.h> #include<sys/types.h> #include<netinet/in.h> #include<string.h> #include<sys/socket.h> #include<stdlib.h> #include<unistd.h> int main() { int sd,con,port,i,res; char content[30]; struct sockaddr_in cli; if((sd=socket(af_inet,sock_stream,ipproto_tcp))==-1) { printf("\nsocket problem"); return 0; } bzero((char*)&cli,sizeof(cli)); cli.sin_family = af_inet; printf("enter port no:\n"); scanf("%d",&port); cli.sin_port=htons(port); cli.sin_addr.s_addr=htonl(inaddr_any); con=connect(sd,(struct sockaddr*)&cli,sizeof(cli)); if(con==-1) { printf("\nconnection error"); return 0; } if(fork()) { printf("\nenter data send type exit stop:\n"); scanf("%s",content); while(strcmp(content,"exit")!=0) { send(sd,content,30,0); scanf("%s",content); } send(sd,"exit",5,0); } else { i=recv(sd,content,30,0); while(strcmp(content,"exit")!=0) { printf("\nserver: %s\n",content); i=recv(sd,content,30,0); } send(sd,"exit",5,0); } close(sd); return 0; }
i need connect client can chat using same port. please give me codes that. thank you.
you must fork server's program logic after calling fork()
. 1 branch communicates client, other have call accept again.
there no need spawn new process, can handle connections listen process select()
function. result of function , result of fd_isset macros indicate, connection needs handled or established.
Comments
Post a Comment