连接函数错误10047 (winsock2)
connect function Error 10047 (winsock2)
所以我从MSDN站点复制了一些使用基本windows套接字函数的测试代码。下面是代码:
#include "stdafx.h"
#ifndef UNICODE
#define UNICODE
#endif
#include <stdio.h>
#include <winsock2.h>
#include <ws2tcipip.h>
#include <wchar.h>
int main()
{
int iResult = 0;
//----------------------
// Initialize Winsock
WSADATA wsaData;
iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
if (iResult != 0) {
wprintf(L"WSAStartup function failed with error: %dn", iResult);
return 1;
}
//----------------------
// Create a SOCKET for connecting to server
SOCKET ConnectSocket;
ConnectSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (ConnectSocket == INVALID_SOCKET) {
wprintf(L"socket function failed with error: %ldn", WSAGetLastError());
WSACleanup();
return 1;
}
//----------------------
// The sockaddr_in structure specifies the address family,
// IP address, and port of the server to be connected to.
int I = sizeof(sockaddr_in);
sockaddr_in clientService;
clientService.sin_family = AF_INET;
clientService.sin_port = htons(5000);
in_addr *s = (in_addr*)malloc(sizeof(in_addr));
s->s_addr = inet_addr("127.0.0.1");
clientService.sin_addr = (in_addr_t)s;
iResult = connect(ConnectSocket, (sockaddr*)&clientService,I);
if (iResult == SOCKET_ERROR) {
wprintf(L"connect function failed with error: %ldn", WSAGetLastError());
iResult = closesocket(ConnectSocket);
if (iResult == SOCKET_ERROR)
wprintf(L"closesocket function failed with error: %ldn", WSAGetLastError());
WSACleanup();
return 1;
}
wprintf(L"Connected to server.n");
iResult = closesocket(ConnectSocket);
if (iResult == SOCKET_ERROR) {
wprintf(L"closesocket function failed with error: %ldn", WSAGetLastError());
WSACleanup();
return 1;
}
WSACleanup();
return 0;
}
代码编译得很好。但是,当我运行该程序时,命令提示符屏幕显示以下错误消息:
连接失败,错误:10047
现在我知道错误10047表示地址结构中有错误。我尝试使用inet_pto
n,但这会导致段错误(内存访问冲突),因为inet_pton
使用memcpy
函数。那么这是怎么回事呢?connect
功能实现不正常?也许还有另一种方法来指定地址结构
From MSDN: http://msdn.microsoft.com/en-us/library/windows/desktop/ms737625%28v=vs.85%29.aspx
sockaddr_in clientService;
clientService.sin_family = AF_INET;
clientService.sin_addr.s_addr = inet_addr("127.0.0.1");
clientService.sin_port = htons(27015);
好像是你的设置。sin_addr。
如果结果是以上,不是问题,那么也许你有IP6协议打开,但没有IP4,这就是为什么AF_NET失败,需要AF_NET6。
问题出在这一行:
clientService.sin_addr = (in_addr_t)s;
你将一个in_addr指针赋值给一个in_addr对象。像这样对指针解引用(同时注意,如果删除强制转换,编译器将捕获问题:
clientService.sin_addr = *s;
不过,LastCoder的方法会更简单。没有理由malloc()
一个单独的in_addr结构只是为了复制它。
相关文章:
- WinSock2:connect() 提供"连接被拒绝"
- 使用 Winsock2.h C++向不和谐 API 发送 HTTP 请求时出现问题
- 如何使用 winsock2 实现与 c++ 的多个并行连接?
- 包含在 <WinSock2> Visual Studio 2015 中时出现错误
- C++ Winsock2 客户端未通过远程 IP 连接到服务器
- Winsock2:当我尝试发送带有空格的字符串时,该函数在遇到空格时似乎停止发送
- Winsock2 select():同一个套接字上可能有多个事件吗?
- Winsock2 select() 返回 WSAEINVAL(错误 10022)
- Winsock2 select() 函数:传递 {0, 0} 作为超时参数
- Winsock2.h 无法发送 http 请求
- C WinSock2等到客户端发送数据
- WebSocket客户端和WinSock2服务器,可能吗?
- C++错误:未定义对 (Winsock2.h) 的引用
- 如何构建使用Visual Studio 2017的Windows XP的Winsock2(WS2_32.LIB)应用程序
- winsock2:recvfrom()函数以错误10022(参数无效)结束
- 使用Winsock2向具有域HTTPS的Webstie发送GET请求
- 使用winsock2通过Socks5下载HTTP网站
- WINSOCK2 WSAAsyncSelect 已弃用的问题
- 如何编译需要 <winsock2.h> 的 c++ 项目?
- 连接函数错误10047 (winsock2)