嗯,在这里的第一篇文章,这个地方似乎遍布Google,我通常可以在任何站点/论坛中都提出一个自己的问题,从而找到自己的解决方案;但是,如果我在这ima身上散发更多的子弹,追捕开发了winsock的人并开枪射击(对不起,我认为我已经翻过网每个角落的每一块岩石,都没有运气.... breeaatheee .... e)
我是网络编程的新手,但是最近三年一直在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;
}
在此先感谢您的帮助!
-泰勒
最佳答案
错误10038
是WSAENOTSOCK
:
发生这种情况是因为您省略了对socket()
的调用,并且SocketListen
包含IPPROTO_TCP
常量的值而不是套接字描述符:
SocketListen = (AF_INET,SOCK_STREAM,IPPROTO_TCP);
应该变成:SocketListen = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
关于c++ - C++ Winsock在bind()上给出10038错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11290133/