服务器端:
#include
#include
#include
#include
#include
#include
#include
#include
#define MAXLEN 100 typedef struct sockaddr SA; int main () { int nr; int listenfd,connfd,maxfd,i,nbyte; char buf[MAXLEN]; struct sockaddr_in servaddr,cliaddr; socklen_t clilen; fd_set global_rdfs,current_rdfs; if ((listenfd = socket(AF_INET,SOCK_STREAM,0)) < 0){ perror("socket"); exit(-1); } bzero(&servaddr,sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = INADDR_ANY; servaddr.sin_port = htons(8888); if (bind(listenfd,(SA*)&servaddr,sizeof(servaddr)) < 0){ perror("bind"); exit(-1); } listen(listenfd,5); FD_ZERO(&global_rdfs); FD_SET(listenfd,&global_rdfs); maxfd = listenfd; while(1){ current_rdfs = global_rdfs; if (select(maxfd+1,¤t_rdfs,NULL,NULL,0)<0){ perror("select"); exit(-1); }else { for(i = 0;i<= maxfd;i++){ if (FD_ISSET(i,¤t_rdfs)){ if(i == listenfd){ connfd = accept(listenfd,NULL,NULL); FD_SET(connfd,&global_rdfs); maxfd = maxfd>connfd?maxfd:connfd; }else{ if ((nbyte = recv(i,buf,sizeof(buf),0)) < 0){ close(i); FD_CLR(i,&global_rdfs); }else{ send(i,buf,sizeof(buf),0); } } } } } } return 0; } #
#include
#include
#include
#include
#include
#include
#include
#include
#define MAXLEN 100 typedef struct sockaddr SA; int main (int argc,char *argv[]) { int sockfd,nbyte; socklen_t clilen; struct sockaddr_in servaddr,cliaddr; char buf[MAXLEN]; if((sockfd = socket(AF_INET,SOCK_STREAM,0)) <0){ perror("sockfd"); exit(-1); } memset(&servaddr,0x00,sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = INADDR_ANY; servaddr.sin_port = htons(8888); if (connect(sockfd,(SA*)&servaddr,sizeof(servaddr))< 0){ perror("conncet"); exit(-1); } do { fgets(buf,MAXLEN,stdin); write(sockfd,buf,MAXLEN); memset(buf,0,sizeof(buf)); read(sockfd,buf,MAXLEN); printf("this is client recv read :%s\n",buf); }while(strncmp(buf,"quit",4) != 0); close(sockfd); return 0; }