【发布时间】:2020-06-09 08:31:37
【问题描述】:
原来问题不在我这边……我使用的 Linux 服务器的防火墙拒绝连接……
我正在编写一个客户端/服务器模型,我的目标是客户端和服务器可以在不同的机器上运行,但是,我的客户端中的 connect() 总是返回 -1。 Ping 适用于两台机器之间的两个方向。 代码在同一台机器上运行。
client.c
int fd;
int PORT;
char IP[20];
struct hostent *server;
printf("Enter Port Number: \n");
scanf("%d", &PORT);
printf("Enter IP Address: \n");
scanf("%s", IP);
server = gethostbyname(IP);
socklen_t len;
struct sock_opts *ptr;
struct sockaddr_in serv_addr;
fd = socket(AF_INET, SOCK_STREAM, 0);
bzero((char *) &serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = inet_addr(IP);
serv_addr.sin_port = htons(PORT);
connect(fd,(struct sockaddr*)&serv_addr,sizeof(serv_addr)); //connection timed out
服务器.c
int sockfd, newsockfd, clilen, n;
int PORT;
printf("Enter Port Number: \n");
scanf("%d", &PORT);
struct sockaddr_in serv_addr, cli_addr;
char buffer[128];
sockfd = socket(AF_INET, SOCK_STREAM, 0);
bzero((char *) &serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = INADDR_ANY;
serv_addr.sin_port = htons(PORT);
bind(sockfd, (struct sockaddr *) &serv_addr,sizeof(serv_addr));
listen(sockfd,5);
clilen = sizeof(cli_addr);
newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen);
输出: ./客户
Enter Port Number:
5544
Enter IP Address
192.168.1.56
ERROR: Connection timed out
./服务器
Enter Port Number:
5544
Server will then time out because client is not able to connect.
【问题讨论】:
-
致电
perror获取更详细的错误描述。如果您需要进一步的帮助,请提供minimal verifiable example 并提供您的确切输入。 -
我修改了问题。
标签: c networking network-programming