麻烦帮我看一下这个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?