gpt4 book ai didi

c - 本地主机服务器套接字程序不工作

转载 作者:行者123 更新时间:2023-12-04 12:57:22 24 4
gpt4 key购买 nike

我有用 C 编写的服务器和客户端套接字程序。我想使用 local host ipaddress 127.0.0.1 将客户端程序与笔记本电脑上的服务器程序连接起来。当我执行服务器程序时。它的输出绑定(bind)失败并停止。如何使客户端连接到同一台笔记本电脑上的服务器(即通过本地主机)成为可能。请帮忙。

这是服务器代码(这是一个回显服务器程序):

#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>

main(int argc, char *argv[])
{
int clilen, sockfd, newsockfd, n, cpid;
char msg[100];
struct sockaddr_in serv_addr, cli;
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
{
printf("socket failed to establish\n");
exit(0);
}
printf("socket created\n");
bzero((char *)&serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = inet_addr(argv[1]);
serv_addr.sin_port = htons(atoi(argv[2]));
if (bind(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0)
{
printf("binding failed\n");
exit(0);
}
printf("binding established\n");
if (listen(sockfd, 5) < 0)
{
printf("not listening\n");
exit(0);
}
printf("listening|n");
for (;;)
{
clilen = sizeof(cli);
if ((newsockfd = accept(sockfd, (struct sockaddr *)&cli, &clilen)) < 0)
{
printf("accept failed\n");
exit(0);
}
printf("accepted\n");
cpid = fork();
if (cpid == 0)
{
n = read(newsockfd, msg, 80);
msg[n] = '\0';
write(newsockfd, msg, strlen(msg));
close(newsockfd);
exit(0);
}
}
}

最佳答案

我认为问题的发生是因为您通过命令行传递了错误的值。

下面这行代码可能没有像你预期的那样工作,

serv_addr.sin_addr.s_addr=inet_addr(argv[1]);

请改成

 servaddr.sin_addr.s_addr = htonl(INADDR_ANY);

同时添加此检查以测试端口号,

unsigned int port;
if ( argc < 2 )
{
port = Some_Port_No;
}
else
{
port=atoi(argv[2]);
}

并改变

serv_addr.sin_port=htons(atoi(argv[2]));

servaddr.sin_port = htons(port); 

关于c - 本地主机服务器套接字程序不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15976137/

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