gpt4 book ai didi

android - 使用Tcp/Udp发送数据

转载 作者:可可西里 更新时间:2023-11-01 02:36:18 26 4
gpt4 key购买 nike

这是我的场景。
我有我的设备(Android手机)。
我知道另一个设备的IP地址(互联网上的某个远程设备)
那么,如何将数据发送到另一个设备呢?
我使用像TCP或UDP这样的协议吗?
编辑:我知道有公共IP地址和私有IP地址(比如当设备通过WiFi连接时)。在这种情况下,甚至可以使用tcp或udp吗????

最佳答案

你要做的是一个有共同问题(但也有共同解决方案)的共同任务。您希望将数据从一个设备(计算机/电话等)发送到另一个设备。以下是它在幕后的工作原理:
世界上有很多计算机。每台计算机都有一个标识-一个名称,如果你愿意的话,它被称为计算机的IP地址。IP地址有许多版本/标准,当前标准将IP地址命名为“111.222.333.444”。只有这么多的排列和12位数字-和整个范围的IP地址是保留的。换句话说,没有足够的IP地址供计算机使用。
现在,路由器的发明,除其他原因外,是为了解决这个问题。路由器为其局域网(LAN)内的所有计算机提供一个公共(WAN)IP地址。平均每户有一个路由器,这样可以节省许多IP地址。不幸的是,它还中断了计算机之间的直接通信,因为一台计算机如何与三台使用相同名称的计算机通信?当所有计算机共享相同的广域网IP地址时,如何从计算机C的计算机B中识别计算机A?
首先,让我们澄清一下,就像IP地址有几个版本和标准一样,路由器也有几种类型。顺便说一下,不是路由器造成了计算机之间的直接通信问题,而是路由器的基本网络地址转换技术(NAT)。总之,nat有几种类型,尽管互联网上关于这些类型的信息相对较少,但你仍然可以在维基百科上阅读一些大学研究论文。类型有全锥型、受限型、端口受限型和对称型。
因此,局域网中的计算机共享相同的广域网IP。这是个问题。一个解决方案是什么?如果我们指示路由器将所有传入的流量路由到某个端口,或者路由到局域网中的某台计算机,该怎么办?例如,如果三台局域网计算机共享1.1.1.1的广域网IP,我们可以设置一个称为端口转发的过程来指示路由器将到达端口6000的所有数据包路由到192.168.1.101:3500。
UPNP只是一种奇特的技术(并不总是存在于路由器中——或者更重要的是,在默认情况下很少启用),它允许您使用代码进行转发。
如果我们不能使用upnp来端口转发,因为不是所有设备都启用了它,那么必须有另一个解决方案-而且有:打孔。
打洞有两种方式:UDP和TCP,尽管TCP打洞有点复杂,因为TCP本质上首先是面向连接的协议。UDP打孔更容易,因为您可以在没有连接的情况下发送数据包(事实上,是否真的存在这样的连接?)
你可以在维基百科和其他网站上阅读udp打孔程序。不过,这个概念的工作原理是这样的。任何发送出站数据包的计算机都会收到回复,这意味着路由器将允许入站数据包的回复。首先,两台计算机不期望对方回复,因此每台计算机发送的第一个数据包将被路由器拒绝。但是,如果我们继续发送数据包,路由器将允许其余的数据包通过,因为每台计算机都需要一个回复。只要这个穿孔连接通过偶尔的keep-alive包保持活动状态,它就会保持活动状态。不幸的是,这种UDP打孔方法对于对称NATS来说是不成功的(在下面的链接中解释)。这就是为什么最终的解决方案只是通过您自己的服务器代理连接和流量。这需要一个计算机农场,所以成本相当高。但最终所有的解决方案都被称为回合。stun是一个web服务,您可以通过查询来确定nat类型和公共ip(而不是解析cmyip.com)。只是你在个人研究中会遇到的一些术语。
玩弄这些概念会有所帮助。以下是一些开始使用的资源:
NATS类型:http://think-like-a-computer.com/2011/09/16/types-of-nat/
一种对称nat穿越方法(基本上是通过向更多端口发送更多的数据包):http://www.goto.info.waseda.ac.jp/~wei/file/wei-apan-v10.pdf
Lidgren网络库(内置nat遍历,这是一个c库):http://code.google.com/p/lidgren-network-gen3/w/list

关于android - 使用Tcp/Udp发送数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9423671/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com