69,382
社区成员
发帖
与我相关
我的任务
分享
int main(int argc,char *argv[])
{
int server_sockfd, client_sockfd;
int server_len, client_len;
struct sockaddr_in server_address;
struct sockaddr_in client_address;
memset(&server_address,0,sizeof(server_address));
memset(&client_address,0,sizeof(client_address));
int result;
fd_set readfds, testfds;
int maxfd;
//define a server socket --> bind -- >listen
server_sockfd = socket(AF_INET, SOCK_STREAM, 0);
//bind
server_address.sin_family = AF_INET;
server_address.sin_port = htons(8888);
server_address.sin_addr.s_addr = htonl(INADDR_ANY);
bind(server_sockfd,(struct sockaddr *)&server_address,sizeof(server_address));
//listen
listen(server_sockfd,5);
//set fd_set
FD_ZERO(&readfds);
FD_SET(server_sockfd,&readfds);
maxfd = server_sockfd + 1;
while(1)
{
char ch;
int fd,i;
int nread;
testfds = readfds;
printf("server waiting...\n");
result = select(FD_SETSIZE, &testfds, NULL, NULL, NULL);
if(result < 1)
{
printf("server5\n");
exit(EXIT_FAILURE);
}
for( fd = 0; fd < maxfd; fd++)
{
if(FD_ISSET(fd,&testfds))
{
if(fd == server_sockfd)
{
memset(&client_address,0,sizeof(client_address));
client_len = sizeof(client_address);
client_sockfd = accept(server_sockfd,(struct sockaddr *)&client_address,&client_len);
maxfd = (maxfd > client_sockfd)?maxfd:client_sockfd+1;
FD_SET(client_sockfd,&readfds);
printf("adding client on fd %d\n\n",client_sockfd);
}
else
{
printf("fd %d\n",fd);
recv(fd,&ch,1,0);
printf("recv from client : %c\n",ch);
sleep(5);
ch++;
send(fd,&ch,1,0);
printf("send to client : %c\n\n",ch);
}
}
}
}
}
int main(int argc,char *argv[])
{
int sockfd;
int len;
struct sockaddr_in address;
memset(&address,0,sizeof(address));
int result;
char ch = 'A';
sockfd = socket(AF_INET,SOCK_STREAM,0);
address.sin_family = AF_INET;
address.sin_port = htons(8888);
address.sin_addr.s_addr = inet_addr("127.0.0.1");
len = sizeof(address);
connect(sockfd,(struct sockaddr *)&address,len);
write(sockfd,&ch,1);
read(sockfd,&ch,1);
printf("char from server = %c \n",ch);
close(sockfd);
return 0;
}
ioctl(fd,FIONREAD,&nread);
if(nread == 0)
{
close(fd);
FD_CLR(FD,&readfds);
}
else
{
//原服务器代码58-64行
}