当前位置: 技术问答>linux和unix
麻烦帮我看一下这个socket编程为什么结果不正确
来源: 互联网 发布时间:2017-01-28
本文导语: 这个是客户端程序,就是最后和客户端互动的那部分感觉不对, 两个printf是调试时候加上去的,能打出n,打不出m,然后停在那边不动了, 这是怎么回事? int main() { int clientfd; int n; char buf[BUFFSIZE]; struct sockadd...
这个是客户端程序,就是最后和客户端互动的那部分感觉不对,
两个printf是调试时候加上去的,能打出n,打不出m,然后停在那边不动了,
这是怎么回事?
两个printf是调试时候加上去的,能打出n,打不出m,然后停在那边不动了,
这是怎么回事?
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;
}
|
好吧,你这个程序写的比较蛋疼了,connect自己的socket,好吧,也行,但是你connect之后应该会获得一个socket fd吧,去看看connect的说明,你应该往那个fd里面写,才能够读出数据,还有,你这个里面并没listen怎么能够建立链接呢?,建议还是写个服务端吧。看看 accept() listen()等等。
|
感觉楼主的SELECT函数用的有问题啊,select是用来判断数据通信套接字的,可是楼主却是用在监听套接字上的,而且 FD_ISSET(confd, &full_set);看不明白有什么作用,这个是个判断吗?一定为返回0啊,因为肯定是不在其中的。s_ret=my_select(maxfd+1,&tmp_set,NULL,NULL,NULL);是什么函数,是不是返回值有问题,一直是1,导致一直continue?
|
堵塞在了my_read(clientfd, buf, BUFFSIZE),服务器返回什么?应该是长度没读够,一直再等
|
服务端没回数据,客户端当然read阻塞,否则还能干什么。