gpt4 book ai didi

C++ winsock 在 bind() 上给出 10038 错误

转载 作者:行者123 更新时间:2023-11-30 04:26:49 25 4
gpt4 key购买 nike

嗯,第一次在这里发帖,这个地方似乎遍布谷歌,我通常可以找到我的解决方案,而不必在任何网站/论坛上问我自己的问题;但是,如果我在这个问题上再发子弹,我会追捕开发 winsock 的人并射击他们(很抱歉 愤怒 我想我没有运气就把网的每个角落的每 block 石头都翻了...... breeaatheee....呜呜)

我是网络编程的新手,但在过去的三年里,出于业余爱好一直在使用 C++,最近也在玩 AS3。

我正在尝试编写一个服务器(对于我也在处理的 AS3 项目的客户端),据我所知,这个 SOCKET 非常好。我没有重新创建它,使用它进行多线程处理,没有重新分配或任何东西。没有有趣的商务。简单地尝试将其全部设置好,bind() 就在我的脸上吐出那个讨厌的 10038。

我看过 MSDN,我很清楚 10038 的意思是“尝试在无效套接字上进行操作”;对于我的生活,我看不到它无效的地方。

但是我的废话已经够多了,这里是代码:(functions.h 是空的,还没有到那一步)

 //Server for Project7 - Client written in AS3 under FlashDevelop. Developed under and for the Windows Operating System Enviroment
//All connections handled under TCP/IP on port 3011
//Client is URL locked to www.cutdev.com
//Copyright Tyler Buchinski 2012 All Rights Reserved
#include <iostream>
#include "functions.h"

#define WIN32_MEAN_AND_LEAN

#include <winsock2.h>
#include <windows.h>


using namespace std;

int main()
{

const int iReqWinsockVer = 2; // Minimum winsock version required

WSADATA wsaData;

if (WSAStartup(MAKEWORD(iReqWinsockVer,0), &wsaData)==0)
{
// Check if major version is at least iReqWinsockVer
if (LOBYTE(wsaData.wVersion) >= iReqWinsockVer)
{

SOCKET SocketListen;
SocketListen = (AF_INET,SOCK_STREAM,IPPROTO_TCP);


if(SocketListen == INVALID_SOCKET)
{
cout << "ERROR - could not creaate listening socket." << endl;
system("pause");

return 4;
}

sockaddr_in Listener, Channel1;

Listener.sin_family = AF_INET;
Listener.sin_port = htons(3011);
Listener.sin_addr.S_un.S_addr = INADDR_ANY;

int err = bind(SocketListen,(sockaddr*)(&Listener),sizeof(Listener));
if (!err == 0)
{
cout << "Listener binding failed!" << endl;
cout << err << endl;
cout << WSAGetLastError();

return 3;
}



}
else
{
// Required version not available
cout <<"Required version of Winsock not installed." << endl;
}

// Cleanup winsock
if (!WSACleanup() == 0)
{
// cleanup failed
cout << "WSACleanup Failed!!" << endl;
system("pause");
}
}
else
{
cout << "WSA Startup failed!" << endl;
}
return 0;
}

在此先感谢您的帮助!-泰勒

最佳答案

错误 10038WSAENOTSOCK:

An operation was attempted on something that is not a socket.

This error is returned if the descriptor in the s parameter is not a socket.

发生这种情况是因为您省略了对 socket() 的调用,并且 SocketListen 包含 IPPROTO_TCP 常量的值而不是套接字描述符:

SocketListen = (AF_INET,SOCK_STREAM,IPPROTO_TCP);

应该变成:

SocketListen = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

关于C++ winsock 在 bind() 上给出 10038 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11290133/

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