recvfrom为什么⼀直被阻塞
recvfrom为什么⼀直被阻塞我的⼀个服务器程序,采⽤udp通信,向客户端⼀直发送数据,在客户端⽤linux下的抓包⼯具能收到,但是到了程序⾥却没有反应,请问是什么缘故阿?
使⽤recvfrom函数,就⼀直被阻塞在那⾥了.
客户端程序很简单的。。。
char recv_buf;
int sockfd;
int nrecv;
if ((sockfd = socket(PF_INET, SOCK_DGRAM, 0)) < 0) {
perror("socket");
exit(1);
}
while ( 1 ){
nrecv = recvfrom(sockfd, recv_buf, 20, 0, NULL, NULL);
printf("nrecv=%d\n",nrecv);
elf⽂件中的.init是什么作⽤?
if (nrecv < 0) {
perror("recvfrom");
exit(1);
}
socket通信为什么要指定端口printf("recv_buf=%s\n",recv_buf);
}//end while
close(sockfd);
exit(0);服务器端代码bzero((char *)&servaddrwww.juqii/, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
port = 9887;
servaddr.sin_port = htons(port);
if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
perror("socket");
exit(1);
}
if (bind(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) == -1) {
perror("bind");
exit(1);
}
socket_buf_size = 10000;
aRet = setsockopt( sockfd, SOL_SOCKET,SO_SNDBUF, &socket_buf_size , sizeof(socket_buf_size) );
if(aRet < 0){
perror("setsockopt()");
}
bzero((char *)&cliaddr, sizeof(cliaddr));
cliaddr.sin_family = AF_INET;
port = 9887;
cliaddr.sin_port = htons(port);
cliaddr.sin_addr.s_addr = inet_addr("10.4.16.175") ;
while(1){
nsend = sendto(sockfd, "hello world!!", 20, 0, (struct sockaddr *)&cliaddr, sizeof(cliaddr));
if (nsend < 0) {
perror("sendto");
exit(1);
}
}客户端收哪个地址和端⼝的包啊?哥们www.yanyiguo,,客户端⾮要指定端⼝吗我都设成NULL不⾏原帖由 panstone 于 2007-9-25 17:06 发表 bbs.chinaunix/images/common/back.gif
我的⼀个服务器程序,采⽤udp通信,向客户端⼀直发送数据,在客户端⽤linux下的抓包⼯具能收到,但是到了程序⾥却没有反应,请问是什么缘故阿?
使⽤recvfrom函数,就⼀直被阻塞在那⾥了.
客户端程序很简 ...
收报的⼈不bind,让⼈家上哪你啊
显然是⽹上来现成代码⽣搬硬套出来的,根本没搞明⽩套接字通信的基本流程。原帖由 panstone 于 2007-9-25 17:06 发表bbs.chinaunix/images/common/back.gif
我的⼀个服务器程序,采⽤udp通信,向客户端⼀直发送数据,在客户端⽤linux下的抓包⼯具能收到,但是到了程序⾥却没有反应,请问是什么缘故阿?
使⽤recvfrom函数,就⼀直被阻塞在那⾥了.
客户端程序很简 ...
靠,bind()都没⽤
⽆语汗,都会⽤抓包⼯具了,不⾄于不会BIND吧?
我可是花了⽼⼤⼯夫学那个破tcpdump的。bind 就会在netstat -na 中留下监听的状态
怎么才能让这种状态不可见??
或者说“隐藏”楼上想搞⿁?不想,只是看到有个⼩说上有这么写,很好奇,想知道怎么搞的
楼上有没有源代码可供学习??