一直以为局域网和广域网的编程没什么不同(实际上确实没什么不同),但这里我要说的是C/S和P2P。
先说说为局域网编程,局域网编程不用考虑网关,不用考虑NAT,不用考虑消息发送成功后对方将消息丢弃等,这样编程相当简单,只要建立相应的套接口,设置端口就ok。
一台局域网主机和一台公网主机的通信也很简单,只要局域网主机先发起通话,接下来的工作就和前面一样了。
两台公网上的主机的通信和局域网的通信编程是一样的。
最有难度的就是两台位于不同局域网内的主机通信,因为任意一方向对方发起的通信都会被对方的NAT丢弃,总结了一下,有三种方法可以解决这个问题:
1)端口映射,将局域网的主机映射到其网关上,使其直接和公网连接。
2)通过C/S模式,用服务器作为中转站的间接通信。
3)P2P通信,即通过中间服务器向对方发送和NAT打洞请求的方式,打洞成功后即可不依赖于中间服务器而进行P2P通信了。