【发布时间】:2024-01-17 00:09:01
【问题描述】:
我正在做一个 TCP 连接程序,我想将地址和连接步骤设置为一个函数。该程序可以编译,但是当我运行它时,屏幕显示:错误连接:连接被拒绝。请你帮助我好吗?这是服务器代码:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
void error(char *msg)
{
perror(msg);
exit (1);
}
struct sockaddr_in createSockAddr(int portnum)
{
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = INADDR_ANY;
addr.sin_port = htons(portnum);
return addr;
}
int createServerSocket(struct sockaddr_in serv_addr)
{
int newsockfd;
int sockfd;
int clilen;
sockfd = socket(AF_INET, SOCK_STREAM, 0);//create socket
if (sockfd < 0)
error("ERROR opening socket");
//bind socket
if (bind(sockfd, (struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0)
error("ERROR on binding");
listen(sockfd,5);//listen
clilen = sizeof(serv_addr);
newsockfd = accept(sockfd, (struct sockaddr *) &serv_addr, &clilen);//accept
if (newsockfd < 0)
error("ERROR on accept");
return newsockfd;
}
int main(int argc, char *argv[])
{
int sockfd, newsockfd, portnum, clilen;
char buffer[256];
struct sockaddr_in serv_addr, cli_addr;
int n;
if (argc < 2) {
fprintf(stderr,"ERROR, no port provided\n");
exit (2);
}
portnum = atoi(argv[1]);
serv_addr = createSockAddr(portnum);
newsockfd = createServerSocket(serv_addr);
bzero(buffer,256);
n = read(newsockfd,buffer,255);
if (n < 0) error("ERROR reading from socket");
printf("Here is the message: %s\n",buffer);
n = write(newsockfd,"I got your message",18);
if (n < 0) error("ERROR writing to socket");
return 0;
}
这是客户端代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
void error(char *msg)
{
perror(msg);
exit(1);
}
struct sockaddr_in createSockAddr(int portnum)
{
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = inet_addr("127.0.0.1");
addr.sin_port = htons(portnum);
return addr;
}
int createClientSocket(struct sockaddr_in sockAddr)
{
int sockfd;
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0)
error("ERROR opening socket");//create socket
if (connect(sockfd,(struct sockaddr *)&sockAddr,sizeof(sockAddr)) < 0)
error("ERROR connecting");
return sockfd;
}
int main(int argc, char *argv[])
{
int sockfd, portnum, n;
struct sockaddr_in serv_addr;
struct hostent *server;
char buffer[256];
if (argc < 3) {
fprintf(stderr,"usage %s hostname port\n", argv[0]);
exit(2);
}
portnum = atoi(argv[2]);
serv_addr = createSockAddr(portnum);
sockfd = createClientSocket(serv_addr);
printf("Please enter the message: ");
bzero(buffer,256);
fgets(buffer,255,stdin);
n = write(sockfd,buffer,strlen(buffer));
if (n < 0)
error("ERROR writing to socket");
bzero(buffer,256);
n = read(sockfd,buffer,255);
if (n < 0)
error("ERROR reading from socket");
printf("%s\n",buffer);
return 0;
}
【问题讨论】:
-
我在该代码中看不到可以组装该错误消息的任何地方。客户端问题“连接错误”而不是“错误连接:”时连接失败,失败时不检查 errno。
-
您是否已将
iptables在本地运行配置为丢弃未指定端口上的任何入站连接? -
不~让我看看iptables是什么。我不知道。