不明白为什么if(select(t+1,&c1,NULL,NULL,(struct timeval *)0)>0)中的时间要用(struct timeval *)0代替,而且不能用其他数字,只能用0。等到以后在慢慢找原因吧,暂时记下来。
以下是从client端传入10个数字,server进行冒泡排序,在传回client.
server端代码
#include <stdlib.h>
#include <stdio.h>
#include <netinet/in.h>
#include <fcntl.h>
#include <string.h>
#define PORT 3333
#define MAX 10
main()
{
int t,r,c,i,j,temp;
int ch[MAX];
fd_set c1;
//struct timeval time;
struct sockaddr_in server,client;
socklen_t len=sizeof(client);
if((t=socket(AF_INET,SOCK_STREAM,0))==-1) {perror("socket");exit(1);}
server.sin_family=AF_INET;
server.sin_port=htons(PORT);
server.sin_addr.s_addr=inet_addr("192.168.0.164");
bzero(&server.sin_zero,sizeof(server.sin_zero));
if(bind(t,(struct sockaddr *)&server,sizeof(struct sockaddr))==-1) {perror("bind");exit(1);}
if(listen(t,20)==-1) {perror("listen");exit(1);}
FD_ZERO(&c1);FD_SET(t,&c1);
while(1)
{
//time.tv_sec=0;
//time.tv_usec=0;
if(select(t+1,&c1,NULL,NULL,(struct timeval *)0)>0)
{
if(FD_ISSET(t,&c1)>0)
{
if((c=accept(t,(struct sockaddr *)&client,&len))==-1) {perror("accept");exit(1);}
if(recv(c,ch,sizeof(int)*MAX,0)==-1) {perror("recv");exit(1);}
for(i=0;i<9;i++)
for(j=i+1;j<10;j++)
if(ch[i]>ch[j]) {temp=ch[i];ch[i]=ch[j];ch[j]=temp;}
if(send(c,ch,sizeof(int)*MAX,0)==-1) {perror("send");exit(1);}
}
else perror("FD_ISSET");
close(c);
}
else perror("select");
}
}
client端代码
#include <stdio.h>
#include <stdlib.h>
#include <netinet/in.h>
#include <string.h>
#define MAX 10
main()
{
struct sockaddr_in client,server;
int a,s,i;
int c[MAX],x[MAX];
printf("请输入要排序的数字\n");
for(i=0;i<MAX;i++)
scanf("%d",&c[i]);
if((s=socket(AF_INET,SOCK_STREAM,0))==-1) {perror("socket");exit(1);}
client.sin_family=AF_INET;
client.sin_port=htons(0);
client.sin_addr.s_addr=INADDR_ANY;
bzero(&(client.sin_zero),sizeof(client.sin_zero));
server.sin_family=AF_INET;
server.sin_port=htons(3333);
inet_aton("192.168.0.164",&(server.sin_addr.s_addr));
bzero(&(server.sin_zero),sizeof(server.sin_zero));
if(bind(s,(struct sockaddr *)&client,sizeof(client))==-1) {perror("bind");exit(1);}
if(connect(s,(struct sockaddr *)&server,sizeof(struct sockaddr))==-1) {perror("connect");exit(1);}
if(send(s,c,sizeof(int)*MAX,0)==-1) {perror("send");exit(1);}
if(recv(s,x,sizeof(int)*MAX,0)==-1) {perror("recv");exit(1);}
printf("原值是:\n");
for(a=0;a<MAX;a++)
printf("%d",c[a]);
printf("\n");
printf("排序完:\n");
for(a=0;a<MAX;a++)
printf("%d",x[a]);
printf("\n");
close(s);
}