Winsock错误1013-权限被拒绝
我正在尝试使用C运行下面的简单程序:Winsock错误1013-权限被拒绝,c,sockets,permission-denied,winsock2,C,Sockets,Permission Denied,Winsock2,我正在尝试使用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;
#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;
}
经过一些研究,我发现这意味着这是一个权限被拒绝的错误。
我尝试查找一些修复程序,例如以管理员身份运行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和socket编程一无所知。我已经尝试过你的代码,我可以用它连接到其他机器。我做了一些修改,因为我手头没有运行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
所以基本上你的实现是正确的
这意味着周围还有其他的小精灵!10013的错误是:
WSAEACCES
10013 (0x271D)
An attempt was made to access a socket in a way forbidden by its access permissions.
这可能是由防病毒软件或防火墙软件引起的。因此,请尝试禁用防火墙和防病毒,然后再次运行应用程序
如果有效,请尝试查找防火墙/防病毒设置,该设置可能会阻止您的应用程序连接。这可能是一个相当严峻的考验(我知道我在说什么).在使用服务器结构之前,您应该先将sockaddr_归零,否则我不明白您的意思(我是C新手)?我应该写什么代码?memset(server,0,sizeof server);我在“server.sin_addr.s_addr=inet_addr(“74.125.235.20”);”之前尝试过:“memset(&server,0,sizeof server);”,但这解决不了任何问题!服务器本身就给了我一个编译时错误!他当时可能会收到拒绝的连接,但10013是WSAEACCESS,是常见的原因谢谢,但正如我在问题中所说的,我已经禁用了我的卡巴斯基,但毫无用处。根据第一手经验,我知道,尤其是卡巴斯基会坚持保护你(即使关闭)…那么我该如何关闭它呢?我会尝试的一件事是在启动后关闭自动启动。此外,您还可以添加规则以允许您的程序执行某些操作(但由于您的程序在开发过程中会发生更改,因此在每次构建之后,您可能需要一个新的规则)。最后一个残酷的方法是拆除它。此外,请确保已禁用Windows防火墙。
WSAEACCES
10013 (0x271D)
An attempt was made to access a socket in a way forbidden by its access permissions.