问题描述
- socket通信accept语句执行太长(几百毫秒),会丢失数据怎么解决?
-
WSADATA data; //定义WSADATA结构体对象
WORD w = MAKEWORD(2, 0); //定义版本号码
::WSAStartup(w, &data); //初始化套接字库
SOCKET s, s1;
//定义连接套接字和数据收发套接字句柄s = ::socket(AF_INET, SOCK_STREAM, 0); //创建TCP套接字 sockaddr_in addr, addr2; //定义套接字地址结构 addr.sin_family = AF_INET; //初始化地址结构 addr.sin_port = htons(6000); addr.sin_addr.S_un.S_addr = INADDR_ANY; int n = sizeof(addr2); /*connect(s, (sockaddr*)&addr, sizeof(addr));*/ int tt = clock(); bind(s, (sockaddr*)&addr, sizeof(addr)); listen(s, 2); //s1 = accept(s, (sockaddr*)&addr2, &n); while (true) { int t1 = clock(); s1 = accept(s, (sockaddr*)&addr2, &n);//该语句时间很长 int tt = clock(); int time = tt - t1; char sztext[1000] = { 0 }; recv(s1, sztext, sizeof(sztext), 0); if (s1 == INVALID_SOCKET) { AfxMessageBox(_T("通信故障")); break; } }
解决方案
这个accept取决于你的客户端请求,有客户端请求了,才会accept,不然就阻塞在那
时间: 2024-11-02 05:18:14