服務器端:
#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;
}