【问题标题】:How to connect client/server in C (Beej's Guide to Network Programming)如何在 C 中连接客户端/服务器(Beej 网络编程指南)
【发布时间】:2012-05-11 05:13:02
【问题描述】:

我正在阅读此处的 C 网络编程简单教程: https://beej.us/guide/bgnet/html/multi/index.html

看完之后,我的计划是实现一个测试客户端/服务器程序,然后开始玩,修改东西,添加东西等。我实现了这里找到的程序(第一个客户端/服务器集处理TCP 连接): https://beej.us/guide/bgnet/html/multi/clientserver.html

基本上,“服务器”运行在一台机器上,当客户端连接时,服务器只发送“Hello,world!”当我在同一台机器上运行两者并连接到本地主机时,这工作正常。

但是,我无法连接不同的机器(在 Debian 和 OpenBSD 服务器上都试过,没有 iptables/pf 规则集)。连接只是超时,我不确定为什么。我可以 ping 和 ssh 进入两者。

谁能指出我正确的方向?

编辑:服务器上没有 X,所以没有截图,但是 netstat -tlnp | grep 3490 什么也没给我。

netstat -an 显示 tcp 连接在 3490 上监听。

【问题讨论】:

  • 告诉我们netstat -tlnp | grep 3940
  • 学完这个,转专业的api,ampq or mpi etc..etc...
  • 能否请您发布一些代码 sn-p 以及 tcp 连接失败后的 errno 值?
  • Jay - errno 60. H2CO3 -- 非常酷的东西!谢谢你,我一定会检查的。我觉得我应该学习所有这些套接字的东西只是为了......完整性,我猜,但我肯定会给你的图书馆一个机会。
  • Beej 的指南令人憎恶。拿起史蒂文斯的副本。

标签: c sockets networking connect


【解决方案1】:

我没有看到您的 servinfo 在代码中的任何位置填写

// 服务器应该允许来自任何 IP 地址的连接

  serv_info.sin_addr.s_addr = INADDR_ANY;

您可能还需要填写家庭和端口

// 填写服务器的地址族

  serv_addr.sin_family = AF_INET;

要了解更多详细信息,这是我在论坛上写的一个工作服务器 http://forum.codecall.net/topic/63924-a-simple-tcp-server-using-linux-c-api/

【讨论】:

    【解决方案2】:

    if (bind(sockfd, p->ai_addr, p->ai_addrlen) == -1) { 之前打印出p->ai_addr 的值我敢打赌它是127.0.0.1。这将导致通信在一台计算机上正常工作,但不会发生在其他任何地方。

    要监听所有接口,绑定 0.0.0.0。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多