不使用线程thread可以正常接受报文,加了后就在recvfrom那里不动了,是怎么回事?
using namespace std;
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
void netlist()
{
int sockSrv = socket (AF_INET, SOCK_DGRAM, 0);
sockaddr_in addrSrv,addrClient;
addrSrv.sin_addr.s_addr = htonl(INADDR_ANY);
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(1986);
bind(sockSrv, (sockaddr *)&addrSrv,sizeof(sockaddr));
socklen_t len=sizeof(sockaddr);
char recvBuf[100];
recvfrom(sockSrv,recvBuf,100,0,(sockaddr*)&addrClient,&len);
cout<<recvBuf<<endl;
//closesocket(sockSrv);
}
int main()
{
thread t(netlist);
t.join();
return 0;
}
UDP好象也没RST, 不好意思, TCP搞多了. tcpdump可以查UDP发包的情况
敢问楼主用的是什么编译器,什么库?
从来没看见过thread标准库头文件,难道是boost?
看到你的UPD服务器端代码,先BIND了,后面没有listen.
如果你是客户端代码,又没有先SENDTO
那你在线程netlist 里加上listen试试嘛. 就算可以收包,你那个程序进来了,阻塞在recvfrom也是因为没有别人发UDP包给它.
楼主你敢listen一下,你敢吗?
貌似很奇葩,楼主你敢把JAVA client端的socket.close(); 注释掉吗?
有可能还没发出去就被关掉了.发了RST.
还不行就只能上tcpdump了.
刚学socket和thread就上C++11,太超前了.
果断pthread_create()吧.