gpt4 book ai didi

Windows 上的 C Socket 编程在监听时出现错误,但没有 errno

转载 作者:行者123 更新时间:2023-11-30 15:50:23 24 4
gpt4 key购买 nike

我已经用其他语言完成了套接字编程,但从未直接用 C 语言进行过编程。我正在尝试设置一个简单的服务器来监听 Windows 下的 8080 端口。我使用的是mingw自带的gcc来编译代码。



#include <stdio.h>
#include <string.h>
#include <WinSock2.h>
#include <stdint.h>
#include <time.h>

int main(void) {

int s;
int len;
char buffer[1025];
struct sockaddr_in servAddr;
struct sockaddr_in clntAddr;

int clntAddrLen; //length of client socket addre

//Build local (server) socket add

memset(&servAddr, 0, sizeof(servAddr));
servAddr.sin_family = AF_INET;
servAddr.sin_port = htons(8080);
servAddr.sin_addr.s_addr = htonl(INADDR_ANY);

//create socket
if((s=socket(AF_INET, SOCK_STREAM, 0) %lt; 0 )){
perror("Error: Socket Failed!");
printf("%d\n", errno);
exit(1);
}

//bind socket to local address and port
if((bind(s,(struct sockaddr*)&servAddr, sizeof(servAddr)) %lt; 0))
{
perror("Error:bind failed!");
printf("%d\n", errno);
exit(1);
}

for(;;)
{
len = recvfrom(s,buffer, sizeof(buffer),0,(struct sockaddr*)&clntAddr, &clntAddrLen);

//send string
sendto(s, buffer, len, 0, (struct sockaddr*)&clntAddr, sizeof(clntAddr));
}

}

当我运行代码时,绑定(bind)出错,但没有错误。此代码取自此线程并稍加修改:Windows Socket Programming in C

但是没有错误代码。输出打印出没有错误。它在绑定(bind)时失败,我不知道为什么。我一直在拼凑一些不同的来源。我真的只是想要一些可以在 Windows 上用 C 语言进行 hello world/3 方式握手的东西。

提前致谢。

最佳答案

这是不正确的,因为 operator precedence :

if((s=socket(AF_INET, SOCK_STREAM, 0) < 0 )){

<优先级高于 = 。这意味着代码将分配 10s取决于 socket(AF_INET, SOCK_STREAM, 0) < 0 的结果。更改为:

if((s=socket(AF_INET, SOCK_STREAM, 0)) < 0 ){

使用 WSAGetLastError() 获取失败原因,而不是errno 。来自 MSDN bind() 引用页面:

If no error occurs, bind returns zero. Otherwise, it returns SOCKET_ERROR, and a specific error code can be retrieved by calling WSAGetLastError.

在 Windows 上 WSAStartup() 必须在调用任何套接字函数之前调用。

关于Windows 上的 C Socket 编程在监听时出现错误,但没有 errno,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15797319/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com