引入thread后socket接受不了报文了

不使用线程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;

}

c++

7个回答

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()吧.

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问