scr*_*ess 5 c sockets port localhost
我最近一直在研究套接字编程;并且我目前正在制作一个服务器,该服务器侦听传入连接的端口,然后一旦它获得一个,就读取一个字符串并将其放入一个文件中。
当我从 localhost telnet 到正在运行的服务器时,一切正常,但是当我尝试从其他任何地方访问它时,它就好像它不存在一样。Nmap 不显示特定的开放端口——来自本地主机或远程主机。它只是通过本地主机上的 telnet 工作。
该函数的代码在这里。(Pastebin) 我知道这是一团糟,我对网络编程还很陌生。真的没有任何好的深入教程可以向您展示您需要知道的一切。我想我得买本书了...
你的代码正在调用
if(bind(*sock, b->ai_addr, b->ai_addrlen) == -1) {
Run Code Online (Sandbox Code Playgroud)
其中b基于调用的结果getaddrinfo。这可能不完全包含您想要的内容。它看起来cliaddr已经包含要传递给的正确数据bind(),因此请使用它:
if (bind(*sock, (struct sockaddr *)&cliaddr, sizeof(cliaddr)) {
Run Code Online (Sandbox Code Playgroud)
我不确定getaddrinfo()您可能会返回什么,但从您的描述来看,它可能提供地址 127.0.0.1 (这是本地主机)。如果您bind()仅访问本地主机接口,那么这是唯一响应连接请求的地址。如果绑定到INADDR_ANY,则所有接口都会响应连接请求。
getaddrinfo()对于一个简单的套接字监听程序,您可能根本不需要调用。