当前位置:编程学习 > C#/ASP.NET >>

UDPSocket编程:当服务器位于外网时,内网用户可以与服务器通讯吗

如题:
socket编程,想将服务器放在外网,内网用户可以与服务器通讯吗?
socket用的是IP地址和端口,而内网用户经路由转发后的IP地址都是相同的,如何区分这些来自不同机器的IP?
像腾讯QQ这种即时通讯是通过什么方式来解决? socket qq 即时通讯 --------------------编程问答-------------------- 内网用户每一次开始与外网服务器“握手”,其在网上的端口号基本上都是变化的。

即时通讯与其它通讯一样,通过自定义的信令协议来完成。例如客户端发送这样的消息
{
    "type": "Register",
    "sn": 6,
    "app": "微信电冰箱客户端",
    "data":
      {
          "userId": "45987363",
          "pwd_hash": "7374823883342ab="
      }
}


(当然这只是举例)通过json对象的的type属性告诉服务器这是Register命令,服务器就会用相应的类型把data反序列化为.net程序的、你自定义的Register类型对象实例(假设服务器是.net开发的),然后执行这个对象的Execute方法(假设所有命令都实现了ICommand接口),最后将这个方法的返回的object值再序列化为json字符串返回给客户端。而客户端当然知道返回的字符串的反序列化类型。 --------------------编程问答-------------------- 实际上客户端除了“注册、登录”等少数命令以外,基本上成百上千个其它命令都会有一个passportId(或者叫做sessionId)的属性,这是“会话编号”,是登录时由服务器返回给客户端的。

比如说客户端发给服务器这样的命令
{
    "type": "发送聊天消息",
    "sn": 11298,
    "pid": "ix99237623",
    "to": "ix92833741",
    "data":
    {
        "html": "<img src=\"pic101.png\" alt=\"吐舌\" />不可以<strong>!</ strong>",
        "楼层编号": 120,
        "style class": "x330"
    }
}
    
通过会话编号,来标识客户端的应用程序进程。而不是什么IP。 --------------------编程问答-------------------- 基本上成百上千个其它命令都会有一个passportId -->  基本上成百上千个其它命令在发送时都会伴随着passportId --------------------编程问答-------------------- IP相同,但是端口不同。

难道你不知道NAT么?支持NAT的路由器会负责内网地址的转换和翻译。 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 其实我不明白的是,在socket编程中用的是IP与port,在外网服务器,内网客户端的情况下,IP地址该填写什么?
比如Server端IP:212.85.157.9
Client端内网IP:192.168.253.2,WAN口IP:212.88.15.6
Client连接Server时,直接使用UpdClient.Send( , , ) 这里用212.85.157.9与Server连接?
Server接收到的数据显示来源是212.88.15.6还是192.168.253.2?
这时候直接获得的IP回复会返回到Client端? --------------------编程问答-------------------- 自己顶一下。。。
关于socket编程看来还有很多要学习的
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,