设为首页 加入收藏

TOP

关于socket()和select()的配合使用
2014-11-24 01:20:03 来源: 作者: 【 】 浏览:3
Tags:关于 socket select 配合 使用

不明白为什么if(select(t+1,&c1,NULL,NULL,(struct timeva l *)0)>0)中的时间要用(struct timeva l *)0代替,而且不能用其他数字,只能用0。等到以后在慢慢找原因吧,暂时记下来。


以下是从client端传入10个数字,server进行冒泡排序,在传回client.


server端代码


#include


#include


#include


#include


#include


#define PORT 3333


#define MAX 10


main()


{


int t,r,c,i,j,temp;


int ch[MAX];


fd_set c1;


//struct timeva l 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 timeva l *)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


#include


#include


#include


#define MAX 10


main()


{


struct sockaddr_in client,server;


int a,s,i;


int c[MAX],x[MAX];


printf("请输入要排序的数字\n");


for(i=0;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

printf("%d",c[a]);


printf("\n");


printf("排序完:\n");


for(a=0;a

printf("%d",x[a]);


printf("\n");


close(s);


}


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇JavaFX—是Java桌面的新希望么? 下一篇Linux Kernel 最新稳定版2.6.28发..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: