gpt4 book ai didi

c++ - 为什么此 WinSock 代码无法连接到客户端?

转载 作者:行者123 更新时间:2023-11-30 19:15:42 26 4
gpt4 key购买 nike

我是 Winsock 编程新手,在阅读“Microsoft Windows 网络编程”一书时遇到了这段代码。但这段代码似乎无法连接到客户端。请告诉我如何解决这个问题。

我的服务器代码:

#include <iostream>
#include <winsock2.h>
#include <ws2tcpip.h>
#include <ws2tcpip.h>

#pragma comment(lib, "Ws2_32.lib")

using namespace std;

int main(){
WSADATA wsadata;
int ret;
if ((ret = WSAStartup(MAKEWORD(2, 2), &wsadata)) != 0){
cout << "Wsastartup failed" << endl;
}
else{
cout << "connection made successfully" << endl;
}

SOCKET ListeningSocket, NewConnection;
SOCKADDR_IN ServerAddr, ClientAddr;
int port = 80;

ListeningSocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
ServerAddr.sin_family = AF_INET;
ServerAddr.sin_port = htons(port);
inet_pton(ServerAddr.sin_family,"127.0.0.1",&ServerAddr.sin_addr.s_addr);
int res= bind(ListeningSocket,(SOCKADDR*)&ServerAddr,sizeof(ServerAddr));
if (res == SOCKET_ERROR){
cout << "binding failed" << endl;
}
res = listen(ListeningSocket,5);
if (res == SOCKET_ERROR){
cout << "Listening failed" << endl;
}
int c = 1;
NewConnection= accept(ListeningSocket,(SOCKADDR*)&ClientAddr,&c);
if (NewConnection == INVALID_SOCKET){
cout << "COULD not CONNECT TO CLIENT . err code : "<<WSAGetLastError() << endl;
}


closesocket(ListeningSocket);
if (WSACleanup() == SOCKET_ERROR){
cout << "WSACleanup failed with error : " << WSAGetLastError() << endl;
}
else{
cout << "WinSock data cleaned successfully" << endl;
}
cin.get();
}

运行此代码时,它显示“无法连接到客户端。错误代码 10014”。我在 Windows 开发中心找到了错误代码的描述:地址错误。

系统在尝试使用调用的指针参数时检测到无效的指针地址。如果应用程序传递无效的指针值,或者缓冲区的长度太小,则会发生此错误。例如,如果作为 sockaddr 结构的参数的长度小于 sizeof(sockaddr)。

如何修复此错误?

最佳答案

当你调用accept时,第三个参数指向的变量需要保存第二个参数指向的缓冲区的大小。 (当accept返回时,它将保存实际使用的空间量)

在您的代码中,更改:

int c = 1;

int c = sizeof(ClientAddr);

关于c++ - 为什么此 WinSock 代码无法连接到客户端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32032113/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com