c++winsock出现奇怪错误
c++ winsock strange error
本文关键字:错误 c++winsock 更新时间:2023-10-16
我正在制作一个C++网络应用程序,并正在创建服务器,但我遇到了一个奇怪的问题。当我调用listen时,它应该等待连接,但应用程序会继续,就像listen调用不存在一样。这是我的代码:
#include "includes.hpp"
using namespace std;
SOCKET sv;
WSADATA w;
int serverStart(int port)
{
int error = WSAStartup(0x0202,&w);
if(error)
{
fprintf(stderr,"Error de startup:%i",error);
return false;
}
if(w.wVersion != 0x0202)
{
fprintf(stderr,"Error versión incorrecta de wsadata: Esperada 202.Obtenida %X",w.wVersion);
WSACleanup();
return false;
}
SOCKADDR_IN addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(port);
addr.sin_addr.s_addr = htonl(INADDR_ANY);
sv = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(sv == INVALID_SOCKET)
{
fprintf(stderr,"Error de socket");
return false;
}
if(bind(sv,(LPSOCKADDR)&addr,sizeof(addr)) == SOCKET_ERROR){
fprintf(stderr,"Error de bind");
return false;
}
fprintf(stdout,"Listen..");
listen(sv,SOMAXCONN);
fprintf(stdout,"Fin");
}
我正在从main调用serverStart。我还停用了防火墙,看看是否有问题,但它没有起作用。
感谢
对listen
的调用只会将套接字置于接受独立连接的状态。为了实际接受连接,您需要调用accept
函数。对accept
的调用会阻止程序,直到您获得连接。
SOCKET ClientSocket = INVALID_SOCKET;
// Accept a client socket
ClientSocket = accept(sv, NULL, NULL);
if (ClientSocket == INVALID_SOCKET) {
printf("accept failed: %dn", WSAGetLastError());
closesocket(sv);
WSACleanup();
return 1;
}
listen()不是一个阻塞函数。它只是将套接字置于侦听状态。accept()是阻塞函数,recv()和send()也是阻塞函数。
相关文章:
- 错误:10035 Winsock发送
- Winsock错误10022在听
- 致命错误:Winsock:没有这样的文件或目录
- Winsock 400 错误请求,开放性
- Winsock客户端在本地网络上发生错误11004
- 使用 winsock 库发送 GET HTTP 请求时出现 400 错误请求错误
- Winsock 错误 10049 尝试绑定
- C++ WinSock Recv 在接收 0 数据时终止线程而不是返回错误代码
- C++WinSock蓝牙连接-AT命令-收到错误
- 在C++中处理 Winsock 错误的推荐方法是什么?
- Winsock选择错误10038,绑定和侦听成功
- Winsock发送失败,错误为10093
- Winsock send()总是在服务器中返回错误10057
- Winsock重新定义错误
- C++ Winsock 在 bind() 上给出 10038 错误
- 尝试在 dev C++ win7 中编译 winsock 程序 - 错误
- Winsock -> WinRT Windows.Networking.Sockets -- 映射错误代码
- Winsock UDP文件终止错误10040
- Winsock Connect失败,错误为10049
- 拔下以太网时没有得到Winsock错误