【问题标题】:How to connect two computer on Internet using Sockets in C#如何使用 C# 中的套接字连接 Internet 上的两台计算机
【发布时间】:2014-09-15 10:41:37
【问题描述】:

我想将数据从 PC-01 发送到 PC-B,两台连接到互联网的计算机。可以用c#编写socket程序吗?我尝试搜索很多,所有大多数示例都在本地计算机上或使用静态 IP 地址。

计算机 1 -> 互联网服务提供商(IP:116.203.188.231) -> 宽带路由器 -> PC-01/PC-02

计算机 2 -> 互联网服务提供商(IP:49.202.72.175) -> 宽带路由器 -> PC-A/PC-B

我试试这个:

在服务器上:

m_socListener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint ipLocal = new IPEndPoint(IPAddress.Any, 8000);
m_socListener.Bind(ipLocal);
m_socListener.Listen(4);
m_socListener.BeginAccept(new AsyncCallback(OnClientConnect), null);

在客户端:

m_socClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress ip = IPAddress.Parse(49.202.72.175);
int iPortNo = System.Convert.ToInt32(8000);
IPEndPoint ipEnd = new IPEndPoint(ip.Address, iPortNo);
m_socClient.Connect(ipEnd);
EnableCommands(false);
//watching for data

上面的代码没有问题,但它不起作用。尝试连接时说“无法建立连接,因为目标机器主动拒绝了它”。

我检查了防火墙并允许两个系统的应用程序和端口。

连接电脑的IP为:116.203.188.231,另一台电脑的IP为49.202.72.175。 IP 49.202.72.175 由 ISP 提供(它不是静态 ip,也可能由 isp 端的其他用户共享),并且超过使用本地局域网通过 49.202.72.175 连接到互联网的计算机。那么我可以使用套接字连接计算机吗?或者有什么技术可以连接两台电脑?

提前致谢。

【问题讨论】:

  • 通常端口8000被系统防火墙阻止。尝试在两台机器上使用非阻塞端口或打开防火墙。
  • 你必须在你的路由器上配置端口转发(在监听端)
  • “是否可以用 c# 编写套接字程序?” - 是的。 “或者有什么技术可以连接两台电脑?” - 是的。但是请从小事做起,在您自己的计算机上使用两个程序,然后拿起一本关于基本网络的书来学习识别和解决此类问题。绝对是端口转发。
  • 鉴于您使用的语言,您不太可能想要使用原始套接字。你在做RTC吗?您是否使用自定义协议?您是否正在尝试实现低延迟?如果您不能对所有这些回答是,请查看 WCF 或其他 IPC 框架。
  • 感谢所有 cmets 并为迟到的回复感到抱歉。 @cackharot我也尝试了其他端口并且还禁用了防火墙,我可以连接但是当发送数据时说“现有连接被远程主机强制关闭”。

标签: c# sockets


【解决方案1】:

是的,当然可以

如果你想通过套接字发送它,你可以在这里看到一个例子:

http://code.msdn.microsoft.com/windowsdesktop/Communication-through-91a2582b

另外,您的防火墙可能会阻止此端口。您可以将端口更改为通常打开的 80,或在所有涉及的防火墙中设置扩展

如果你总是知道另一台计算机的 ip,那就太好了

否则,我建议使用将在它们之间连接的服务器

【讨论】:

  • 抱歉,链接已修复
猜你喜欢
  • 2013-08-03
  • 2021-08-04
  • 1970-01-01
  • 1970-01-01
  • 2021-07-21
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 2015-05-17
相关资源
最近更新 更多