Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 套接字编程学习_C++_Sockets_Tcp_Ip - Fatal编程技术网

C++ 套接字编程学习

C++ 套接字编程学习,c++,sockets,tcp,ip,C++,Sockets,Tcp,Ip,我一直在学习如何编写套接字,但当我尝试编写代码时,我遇到了一些问题。该代码适用于连接到同一局域网上的计算机,但当我试图通过internet连接到不同网络上的两台计算机时,我无法连接 这是因为程序还是因为网络安全 如果我想让应用程序通过internet进行通信,我在哪里可以找到更多信息。我想制作一个聊天程序,这样我能更好地理解它,但我甚至不能让这个程序在互联网上交流 编辑: 我使用的端口是6892。这只是一个随机端口。我还在学习这些东西。如果你使用的是本机套接字,而你在防火墙后面,这肯定会失败。您

我一直在学习如何编写套接字,但当我尝试编写代码时,我遇到了一些问题。该代码适用于连接到同一局域网上的计算机,但当我试图通过internet连接到不同网络上的两台计算机时,我无法连接

这是因为程序还是因为网络安全

如果我想让应用程序通过internet进行通信,我在哪里可以找到更多信息。我想制作一个聊天程序,这样我能更好地理解它,但我甚至不能让这个程序在互联网上交流

编辑:
我使用的端口是6892。这只是一个随机端口。我还在学习这些东西。

如果你使用的是本机套接字,而你在防火墙后面,这肯定会失败。您的防火墙几乎肯定会设置为只允许端口80(用于http)和端口443(?)用于https。

在某些第3层网络拓扑中,计算机之间的连接不是双向的,必须通过联合代理等技术来调解通信


远程站点可能无法直接寻址您的计算机,根据设置,它只能访问您的网关。

是一台或两台计算机,还是您的计算机在本地网络中?如果它们的IP以
192.168
开头,则它们位于本地网络中

您还可以使用检查显示的IP是否与您在计算机上看到的IP相同,但请记住删除任何代理


如果目标计算机位于本地网络中,或者所述网站中显示的IP与计算机上显示的IP不同,则您将遇到问题。这种情况与您的程序无关,但您必须配置网络。您可能需要联系您的网络经理来解决此问题。

水晶球今天很模糊。请显示一些代码或至少一些有关您正在使用的端口、网络设置等的详细信息。您应该记住,internet上的大多数端口都被防火墙阻止,因此请尝试连接两台您能够控制这些端口的主机。但如何通过防火墙?就像现在常见的聊天应用程序必须通过防火墙一样,首先,检查远程计算机上的6892是否可以从您的计算机访问
telnet REMOTE_IP 6892
那么这是否意味着我必须在防火墙上打开一个端口或进行某种端口转发?我会避免打开任何不必要的端口,尤其是当你不确定自己在做什么时。那是一种肯定会被黑客攻击的方式。但是,是的,你可以做到。标准端口列表如下面的Clyfe评论所述,您甚至可能无法连接,即使您打开了正确的端口。例如,您可以考虑HTTP隧道技术。您需要打开在套接字链接两端之间的任何防火墙上使用的端口。很好地理解开放端口是有风险的,但是如何连接到Internet的程序访问Internet?对于http隧道,我是否需要编写另一组代码?将ip硬编码到程序中是否安全?是的,当两台计算机都在本地网络中时,它们能够通信。但当它们不在同一台计算机上时,程序就无法通信。这就是我试图理解的:当它们不在同一个网络上时,如何使它们通信。@mma1480这是因为在网络之外看不到本地网络地址。您需要知道用于访问本地网络的地址(通常是上述网站中显示的地址),并且需要端口转发。也许这会有帮助。但是配置网络转发需要管理权限来管理本地网络的配置。您可能需要联系网络经理。