首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

麻烦帮小弟我看一下这个socket编程为什么结果不正确

2012-02-21 
麻烦帮我看一下这个socket编程为什么结果不正确这个是客户端程序,就是最后和客户端互动的那部分感觉不对,

麻烦帮我看一下这个socket编程为什么结果不正确
这个是客户端程序,就是最后和客户端互动的那部分感觉不对,
两个printf是调试时候加上去的,能打出n,打不出m,然后停在那边不动了,
这是怎么回事?

C/C++ code
int main(){    int clientfd;    int n;    char buf[BUFFSIZE];    struct sockaddr_in saddr;    clientfd = my_socket(AF_INET, SOCK_STREAM, 0);    bzero(buf,BUFFSIZE);    bzero(&saddr, sizeof(saddr));    saddr.sin_family = AF_INET;    saddr.sin_port = htons(S_PORT);    inet_pton(AF_INET, "127.0.0,1", &saddr.sin_addr);    my_connect(clientfd, (struct sockaddr *)&saddr, sizeof(saddr));    while(fgets(buf, BUFFSIZE, stdin)!= NULL)    {                my_write(clientfd, buf, sizeof(buf));            printf(" n : \n");        if (!(n = my_read(clientfd, buf, BUFFSIZE)))            puts(" Sorry, the server has been closed..\n");        else             printf(" m : \n");            my_write(STDOUT_FILENO, buf, n);        bzero(buf,BUFFSIZE);            }    return 0;}


[解决办法]
堵塞在了my_read(clientfd, buf, BUFFSIZE),服务器返回什么?应该是长度没读够,一直再等
[解决办法]
好吧,你这个程序写的比较蛋疼了,connect自己的socket,好吧,也行,但是你connect之后应该会获得一个socket fd吧,去看看connect的说明,你应该往那个fd里面写,才能够读出数据,还有,你这个里面并没listen怎么能够建立链接呢?,建议还是写个服务端吧。看看 accept() listen()等等。
[解决办法]
服务端没回数据,客户端当然read阻塞,否则还能干什么。
[解决办法]
感觉楼主的SELECT函数用的有问题啊,select是用来判断数据通信套接字的,可是楼主却是用在监听套接字上的,而且 FD_ISSET(confd, &full_set);看不明白有什么作用,这个是个判断吗?一定为返回0啊,因为肯定是不在其中的。s_ret=my_select(maxfd+1,&tmp_set,NULL,NULL,NULL);是什么函数,是不是返回值有问题,一直是1,导致一直continue?

热点排行