我试图使用C:
运行下面的简单程序#include <winsock2.h>
#include <ws2tcpip.h>
#include <stdlib.h>
#include <stdio.h>
#pragma comment (lib, "Ws2_32.lib")
int main(int argc, char **argv)
{
int iResult;
WSADATA wsa;
SOCKET s;
struct sockaddr_in server;
printf("Initialising Winsock...\n");
if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0)
{
printf("Failed. Error Code : %d", WSAGetLastError());
getchar();
return 1;
}
printf("Initialised.\n");
//Create a socket
if ((s = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET)
{
printf("Could not create socket : %d", WSAGetLastError());
getchar();
}
printf("Socket created.\n");
server.sin_addr.s_addr = inet_addr("74.125.235.20");
server.sin_family = AF_INET;
server.sin_port = htons(80);
//Connect to remote server
iResult = connect(s, (struct sockaddr *)&server, sizeof (server));
if (iResult == SOCKET_ERROR)
{
printf("Connect function failed with error: %ld\n", WSAGetLastError());
iResult = closesocket(s);
if (iResult == SOCKET_ERROR)
printf("closesocket function failed with error: %ld\n", WSAGetLastError());
WSACleanup();
getchar();
return 1;
}
printf("Connected");
getchar();
return 0;
}
这基本上是一个C程序,它创建一个套接字并与Google建立连接。 (我只是按照教程:http://www.binarytides.com/winsock-socket-programming-tutorial,因为我完全不熟悉套接字编程。)
现在我的程序输出:
Initialising Winsock...
Initialised.
Socket Created.
Connect function failed with error: 10013
经过一番研究后,我发现这意味着这是一个权限被拒绝的错误。 我尝试寻找一些修复程序,例如以管理员身份运行Visual Studio Express并在命令提示符下运行这些命令:
netsh winsock reset catalog
netsh int ip reset reset.log hit
然后重新启动我的电脑,但它仍无效。
当我运行第二个命令时值得一提:netsh int ip reset reset.log hit我收到以下错误信息:
Resetting , failed.
Access is denied.
There's no user specified settings to be reset.
即使我以管理员身份运行命令提示符。
我也暂时取消了我的卡巴斯基互联网安全功能,但仍无法修复。我是C和套接字编程的新手。
答案 0 :(得分:0)
我已经尝试过你的代码,我可以用它来连接其他机器。我做了一点修改,因为我现在没有运行HTTP服务器的机器。因此我使用www.google.com:
struct sockaddr_in server;
remoteHost = gethostbyname("www.google.com"); // get IP of www.google.com
server.sin_addr.s_addr = *((unsigned long *)remoteHost->h_addr); // inet_addr("74.125.235.20");
server.sin_family = AF_INET;
server.sin_port = htons(80);
您的应用程序的输出是:
Initialising Winsock...
Initialised.
Socket created.
Connected
所以基本上你的实现是正确的。
这意味着周围还有一些其他的gremlin!错误10013的MSDN description是:
WSAEACCES
10013 (0x271D)
An attempt was made to access a socket in a way forbidden by its access permissions.
这可能是由防病毒软件或防火墙软件引起的。因此,请尝试禁用防火墙和防病毒并再次运行应用程序。
如果可行,请尝试查找可能会阻止您的应用程序连接的防火墙/防病毒设置。这可能是一个相当严峻的考验(我知道我在说什么)......