【问题标题】:Unable to establish connection between client and server in C无法在C中建立客户端和服务器之间的连接
【发布时间】:2015-07-28 06:04:36
【问题描述】:

我正在用 C 语言编写程序,我必须使用套接字吗? 如果我使用通用 IP (INADDR_ANY),客户端可以成功建立与服务器的连接,但如果我使用其他 IP,例如“192.168.1.100”,则连接失败。

服务器->

int sock = socket(AF_INET, SOCK_STREAM, 0), fd_sock, dim, dim1;
struct sockaddr_in my_addr, *client = (struct sockaddr_in*) malloc (sizeof(struct sockaddr_in));

my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(port);
my_addr.sin_addr.s_addr = inet_addr("192.168.1.200");

bind(sock, (struct sockaddr *) &my_addr, sizeof(my_addr));
listen(sock, N*N);

while(1){
    fd_sock = accept(sock, (struct sockaddr *)client, &dim1);
    dim = read(fd_sock, buf, 100);
    buf[dim] = '\0';
    write(STDOUT_FILENO, buf, dim); 

    close(fd_sock);
}

close(sock);

客户->

int port = atoi(argv[2]) // I give the port as second argument from code line
char *ip = malloc(15); // I give IP as first argument from code line
strcpy(ip, argv[1]);
int sock = socket(AF_INET, SOCK_STREAM, 0), fd_sock;
struct sockaddr_in my_addr;
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(port);
my_addr.sin_addr.s_addr = inet_addr("192.168.1.200");
connect(sock, (struct sockaddr *) &my_addr, sizeof(my_addr));
write(sock, ip, 15);

如果不是

my_addr.sin_addr.s_addr = inet_addr("192.168.1.200");

我用

my_addr.sin_addr.s_addr = inet_addr(INADDR_ANY);

在客户端和服务器上,socket 连接都可以正常工作。

有什么解决办法吗?

【问题讨论】:

  • 哪些IP地址分配给服务器的接口?
  • 你不是真的在做... = inet_addr(INADDR_ANY);,是吗?
  • 如果服务器带有192.168.1.100,您将无法在192.168.1.200 下访问它(根据您显示的代码),这是肯定的。
  • 另外,如果你的“真实”代码还没有,你可以帮自己一个大忙,为所有(相关的)系统调用添加错误检查。正如所显示的代码所示,至少是bind()accept()read()write()connect()
  • 我也有高级 Unix 编程,来自 stevens。

标签: c sockets


【解决方案1】:

但如果我使用其他 IP,例如“192.168.1.100”

你确定你的私有IP是192.168.1.100吗?如果不确定,请在 windows 中使用命令 ipconfig 或在 linux 中使用 ifconfig

此外,您的客户端和服务器似乎都在同一台机器上。 您是否尝试过 localhost ip(127.0.0.1)?这是一个无论你在哪台机器上总是指向同一台机器的 ip。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-08
    • 2012-04-24
    • 2011-05-20
    • 2016-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-30
    相关资源
    最近更新 更多