Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Winsock C TCP套接字_C_Sockets_Tcp_Winsock - Fatal编程技术网

Winsock C TCP套接字

Winsock C TCP套接字,c,sockets,tcp,winsock,C,Sockets,Tcp,Winsock,我以前在Python中使用过TCP套接字。它在C语言中看起来很相似,但我无法让任何东西工作套接字(AF\u INET,SOCK\u STREAM,0)返回-1,这当然表示错误。我怎么会这么快就错了? 如果你能帮我解决这个问题,那就太好了,但是如果你能给我提供一些简单的、基本的源代码,那将是非常有帮助的。它甚至不需要做任何事情,也不需要处理错误。我只需要看看如何正确地创建一个服务器套接字,绑定它,监听它,接受客户机,以及如何创建和连接客户机套接字。我能自己算出所有的钟声和口哨声 谢谢 可能只是进程

我以前在Python中使用过TCP套接字。它在C语言中看起来很相似,但我无法让任何东西工作<代码>套接字(AF\u INET,SOCK\u STREAM,0)返回-1,这当然表示错误。我怎么会这么快就错了? 如果你能帮我解决这个问题,那就太好了,但是如果你能给我提供一些简单的、基本的源代码,那将是非常有帮助的。它甚至不需要做任何事情,也不需要处理错误。我只需要看看如何正确地创建一个服务器套接字,绑定它,监听它,接受客户机,以及如何创建和连接客户机套接字。我能自己算出所有的钟声和口哨声


谢谢

可能只是进程没有创建套接字的权限(
errno==EACCES

也许您的python解释器获得了不同的安全上下文,请检查这一点

总之,安全总比抱歉好,所以放在那里,比如:

sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock == -1) {
        perror("myapp");
        exit(1);
}
IDK如果Winsock实际设置了
errno
,但它应该…

在进行任何其他Winsock调用之前,您是否已呼叫过它?

客户端:

服务器:

在使用套接字之前,需要使用该函数初始化WinSock。Python在Windows上实现的套接字可能会自动调用此函数,因此您无需担心,但是,当直接使用WinSock时,在任何其他WinSock调用之前调用
WSAStartup
非常重要,当您的程序使用套接字完成时,您需要调用
WSACleanup

WSAData data;

if (WSAStartup(MAKEWORD(2, 2), &data) != 0)
{
    // unable to initialise WinSock, time to quit
}

// WinSock has been successfully initialised, time to make sockets!
int s = socket(...);

// After all WinSock stuff is done, balance out your WSAStartup with a cleanup:
WSACleanup();

调用套接字后,
WSAGetLastError()
返回什么?程序运行的用户是否具有使用网络的权限?WSAGetLastError返回10093,我通常运行使用套接字的Python编写的程序。Winsock不是CRT的一部分,因此它无权访问
errno
。但是,它确实设置了一个可以用
WSAGetLastError
检索的错误代码。奇怪的是,
errno
应该是可以定位的。。。(但你总是可以从微软的软件中得到类似的东西)那么,有没有什么功能可以将它转换成人类可读的文本字符串呢?这不是“微软的软件”的问题——这是运行时和操作系统不同的问题
errno
不是一个系统,而是一个运行时库。非RTL函数不应该真正接触它。至于将其转换为错误字符串,有一个。是的,这是一个“微软的软件”的东西,errno是c库的标准组件,用于报告任何系统错误。IPC错误是一种系统错误。他们只是执行错误。此外,术语RTL没有意义,为什么要链接一个在运行时不使用的库?感谢您向我展示如何使用WSAStartup。这种C语言编程让我很困惑。。。