gpt4 book ai didi

本地主机的 c TCP 套接字连接被拒绝

转载 作者:可可西里 更新时间:2023-11-01 02:35:57 24 4
gpt4 key购买 nike

我试图在本地主机上制作一个客户端/服务器程序,但客户端无法连接到服务器,我不知道我做错了什么。

我试过调试程序,所有参数似乎都没有问题。服务器确实绑定(bind)、连接、监听和接受。

使用客户端代码获取 connect: Invalid argument 错误。客户端(我使用 ./client localhost 从控制台调用客户端):

#include <netinet/in.h>
#include <netdb.h>
#include <string.h>
#include <stdio.h>
#include <errno.h>

int main(int argc, char * argv[])
{
int cd;
struct hostent *hp;
struct sockaddr_in s_ain;
unsigned char byte;

hp = gethostbyname(argv[1]);
bzero((char *)&s_ain, sizeof(s_ain));
s_ain.sin_family = AF_INET;
memcpy(&(s_ain.sin_addr), hp->h_addr, hp->h_length);
s_ain.sin_port = htons(1025);

cd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if( connect(cd, (struct sockaddr*) &s_ain, sizeof(s_ain) == -1) ) {
fprintf(stderr, "connect: %s\n", strerror(errno));
return -1;
}

printf("%s\n", "IT WORKS!");
close(cd);
return 0;
}

服务器:

#include <netinet/in.h>
#include <netdb.h>
#include <string.h>
#include <stdio.h>

int main(void)
{
int sd, cd;
socklen_t size;
unsigned char byte;
struct sockaddr_in s_ain, c_ain;

sd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

bzero((char *)&s_ain, sizeof(s_ain));
s_ain.sin_family = AF_INET;s_ain.sin_family = AF_INET;
s_ain.sin_addr.s_addr = INADDR_ANY;
s_ain.sin_port = htons(1025);

if(bind(sd, (struct sockaddr *)&s_ain, sizeof(s_ain)) == -1) {
fprintf(stderr, "%s\n", "err bind");
return -1;
}

if(listen(sd, 5) == -1) {
fprintf(stderr, "%s\n", "err listen");
return -1;
}

while(1) {
size = sizeof(c_ain);
cd = accept(sd, (struct sockaddr *)&c_ain, &size);
printf("%s\n", "IT WORKS !");
}
}

最佳答案

要么你的例子有错别字,要么

if( connect(cd, (struct sockaddr*) &s_ain, sizeof(s_ain) == -1) ) {
fprintf(stderr, "%s\n", "err connect");
return -1;
}

有错误的括号。目前,您将使用 socklen_t addrlen 作为 0 调用 connect。应该是

if( connect(cd, (struct sockaddr*) &s_ain, sizeof(s_ain)) == -1) {
fprintf(stderr, "%s\n", "err connect");
return -1;
}

关于本地主机的 c TCP 套接字连接被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36153781/

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