DirectPlay

多人游戏或聊天程序的工具

Microsoft DirectPlay API为开发者提供了开发诸如多人游戏或聊天程序的工具,它是Microsoft DirectX的组件之一。DirectPlay完成了与用户连接相关的所有复杂工作,使那些后台网络地址转化(NAT)设备保持一致,并管理会话。它允许你创建、查找、连接多人游戏。连接以后,DirectPlay可以让你向其他玩家发送已验证或未验证的信息。这是作为一个网络应用程序最基本的框架,并且还提供了在游戏中传输语音的功能。9.0新增内容,DirectPlay提供支持Microsoft Windows Powered Pocket PC 2002,并能与DirectPlay8.0的程序进行通讯。

基本介绍
Microsoft® DirectPlay® API提供给开发者开发例如游戏或聊天客户端的多人应用程序的工具。简单起见,本文件将把所有这样的程序叫做“游戏”。一个多人应用程序有两个基本特征:
两个或多个单独的用户,每一个都在它们的计算机上具有一个游戏客户端
网络联接使得用户的计算机可以与其它人通信,或许通过一个中央服务器。
DirectPlay提供了一个额外的层,使你的游戏和网络底层相隔。并且,你的游戏可以非常简单的使用DirectPlay API,并使用DirectPlay管理网络通讯
特性
DirectPlay特性
DirectPlay提供的特性,使多人游戏在开发中得到了很多简化。其中包括:
1 创建和管理点对点,客户/服务会话(Session)
2 在一个会话中管理用户(User)和组(Group)
3 管理在不同网络平台上进行会话的成员之间发送的消息
4 使游戏在大厅(Lobby)中互动
5 使用户可以进行语音互动
这部分的文档(Introduction To DirectPlay)高度概括了DirectPlay的功能。随后的章节将告诉你DirectPlay的细节和如何在你的游戏中使用DirectPlay。
DirectPlay Network Communication
Communicating with DirectPlay Objects
Creating and Managing Sessions
DirectPlay9.0新特性
DirectPlay应用程序接口(APIs)可以运行在Microsoft Windows® Powered Pocket PC 2002系统上。详细内容请查看DirectPlay for Pocket PC 2002。
DPN_MSGID_SEND_COMPLETE消息结构允许你利用其内部的两个成员在短时间内进行消息往返性质的传输。
DirectPlay提供一个新的网络服务层,你可以使用IDP8SimControl的方法去调试一个多样性的网络环境(PS:我认为这里是说在一个应用程序中同时使用多个协议) DirectPlay has a new service provider for network simulation. You can use the IDP8SimControl methods to test applications under a variety of network conditions.
DirectPlay有一个新的接口,IDirectPlay8ThreadPool,它允许你管理应用程序中的多个线程。
应用程序可以取消所有消息发送,前提是一个特殊的玩家在调用以下几个函数中使用了DPNCANCEL_PLAYER_SENDS标志位
IDirectPlay8Peer::CancelAsyncOperation, IDirectPlay8Server::CancelAsyncOperation, IDirectPlay8Client::CancelAsyncOperation.
玩家们可以在DPN_MSGID_CONNECT_COMPLETE消息中接收他们的本地玩家标识符(ID).
主机可以预防从进程枚举中提取到被设置为DPNSESSION_NOENUMS 标志位的DPN_APPLICATION_DESC结构。该消息在调用IDirectPlay8Peer::Host and IDirectPlay8Server::Host时发出.
如果消息发送到一个没有任务玩家的组中,它将马上返回DPNSUCCESS_NOPLAYERSINGROUP以替代了原来的DPNERR_GENERIC.
信息包的签名可用在所有DirectPlay通信上。
在调用以下几个方法时,将标志位设置为DPNCLOSE_IMMEDIATE,那么该应用程序可以被立即关闭。
IDirectPlay8Peer::Close,
IDirectPlay8Client::Close,
IDirectPlay8Server::Close.
DirectPlay 9.0 增强了反向连接欺骗的防御措施
在以下方法中使用DPNINITIALIZE_HINT_LANSESSION 标志位初始化 IDirectPlay8Peer::Initialize,
IDirectPlay8Client::Initialize,
IDirectPlay8Server::Initialize.
在调用发送信息的函数时,信息包是可以被连接合并的。只要在以下函数中设置DPNSEND_COALESCE标志位
IDirectPlay8Peer::SendTo,
IDirectPlay8Client::Send,
IDirectPlay8Server::SendTo.
应用程序可以利用DPN_CAPS_EX结构对DirectPlay的协议进行调整。适用函数:IDirectPlay8Peer::GetCaps,IDirectPlay8Client::GetCaps,
IDirectPlay8Server::GetCaps,IDirectPlay8Peer::SetCaps,
IDirectPlay8Client::SetCaps,IDirectPlay8Server::SetCaps.
当一个组被加入到DPNMSG_CREATE_GROUP结构中,就会拥有上下关联的值。
如果在调用IDirectPlay8Peer::Host或者 IDirectPlay8Server::Host方法时,没有在DPN_APPLICATION_DESC结构中设置DPNSESSION_NODPNSVR标志位,并且没有运行dpnsvr.exe,那么创建主机的行为将会出错并返回DPNERR_DPNSVRNOTAVAILABLE.
Less reliable connections should now perform better with improved DirectPlay protocol behavior.
Network Address Translation (NAT) support has improved. This includes the new IDirectPlay8NATResolver interface, which allows you to create a NAT resolver application.
DirectPlay now supports Internet Protocol (IP) v6.
网络通讯
DirectPlay点对点布局
一个点对点游戏由单独的玩家计算机组成,用网络连接进行连接。示意,一个四玩家点对点游戏布局看起来是这样:
Gameplay通过具有每一用户的游戏客户端与其它用户客户端直接通信进行控制。例如,当一个用户移动,这一游戏客户端必须发送三条更新消息,每一条发送到每一个其它用户计算机。
一个点对点游戏通常被组织和加载于一个用户计算机上的大厅客户端程序。大顶客户端能够组织一个会话有两个基本方法:
大厅客户端与其它潜在用户的大厅客户端直接进行通信。这一方案能被用于,例如,组织一个用户在同一局域网子网中的游戏。
大厅客户工作于一个远程计算机上的大厅服务器程序的联接。这是基于互联网游戏通常的组织方法。
一旦一个会话被设置好和启动,大部分或所有消息将是用户到用户的。如果一个大厅服务器被关联,它将仅仅控制这样的工作,比如当一个玩家离开游戏时更新会话成员列表,或者允许新的用户进入会话的请求。否则,服务器居于后台,并且特定情况下甚至不知道大部分正发出的消息。
因为服务器端或者是不存在的或者至少不直接与游戏进行有关,一个用户被设计为游戏主机。它们负责管理后勤的细节,如把新玩家带入正在进行的会话。
点对点游戏具有简单的优点。所有所需是一个招集玩家的游戏客户端,通过管理一个会话。点对点布局的主要缺点是数量性。随着用户数量增加,消息数量需要几何级的增长。用户数的最大值依赖于游戏和网络带宽,但是特定为不超过20-30。
DirectPlay网络通讯
协议提供了极其适用多用户游戏的大量特征:
·可靠及不可靠的消息传递。可靠消息将一直重发直到对方接收;
·连续及不连续的消息分发。连续消息会以发送时的顺序达到目的端;
·消息分块及重组。如果消息大小超过了网络传输能力,DirectPlay会自动把这些消息分块(传输)并重组;
·拥塞控制。DirectPlay可以自动“扼杀”Outgoing的消息以使得目标(程序)可以(及时)处理。
(以上两条,其实就是解决两个问题,消息的大小,及单位时间内可以发送消息的个数)
·发送优先级,以确保重要消息先发送。DirectPlay可以制定三种级别低(low)、中(medium)、高(high)。high优先级的消息在输出队列的前端,然后依次是medium及low优先级的消息。
DirectPlay网络能力的核心是DirectPlay协议。这一传输层协议完全兼容DirectPlay8,现在并且用于所有消息。DirectPlay协议关注于全你从发送程序到接收程序传送数据更简单,不需为两者间发生了什么犯愁。这一协议提供了一定数量的特性,以供应多人游戏的需求,包括:
消息的可靠和不可靠传输。可靠消息将被重新传输直到接收程序收到它们。你可以分配传输类型为message-by-message。
消息的连续和不连续传输。连续消息将以它们发出时的顺序传送的接收程序。
消息的分裂与组装。如果消息尺寸超过特定网络的能力,DirectPlay自动分裂组装消息。
阻塞控制。DirectPlay自动扼杀你发出的消息到一个接收程序可以控制的极别。这一特性防止你因大最接收程序不能处理的消息所造成的消息泛滥。
传输优先级。为了保证最重要的消息首先被发出。DirectPlay允许你指定消息为低、中、高优先级。高优先级的消息被发送到输出队列的最前面,其后是中、低优先级消息。
消息超时设定。为了防止送出的消息队列被很多当前的消息延时的消息阻塞,DirectPlay允许你为所有消息设定一个超时值。当一个消息超时时,它被从发出消息队列(outgoing message queue)删除,不管它发没发出。
DirectPlay 地址
为了能传递消息,多人游戏中,每个参与者都必须拥有一个唯一(可识别的)地址。
地址可能会参照应用程序所在机器(设备地址)或者应用程序需要通信的机器(主机地址)而确定。
DirectPlay地址的形式同URL串,由scheme、scheme分隔符及数据串组成:
为了传输消息,每一个多人游戏中的参与者必须具有一个唯一的地址。地址能涉及你的应用程序运行于其上的计算机(设备地址device address)或都你的应用程序需要通信的计算机(主机地址host address)两者。
DirectPlay地址是URL字符串格式。这些字符串由一个scheme(方案)、scheme separator(方案分离器)和数据字符串组成,具有下面通用的格式。
x-directplay:/[data string]
数据字符串包括不同的元素,以指定使发送者和接收者两者间能够发生通信所需要的任何东西,覆盖多种不同的网络连接类型。
在使用方面,URL字符串被传递到DirectPlay API方法或从DirectPlay API方法传递的DirectPlay地址对象所包含。你具有直接操作URL字符串或使用由地址对象暴露的方法以操作数据字符串分离出的每一个元素的选项。
与DirectPlay对象通信
简介
DirectPlay包括一个COM对象集。每个对象暴露了一个或多个使你能控制DirectPlay不同方面的一个或多个接口。比如,DirectPlay点(peer)对象(CLSID_DirectPlay8Peer),就是负责管理点对点游戏的。
你通过调用DirectPlay对象接口所暴露的方法来和它通讯。比如,为了在点对点游戏给其它用户发送数据,你将调用IDirectPlay8Peer::SendTo方法发送一条消息。DirectPlay然后会在它的接收端处理接收消息的工作。
DirectPlay通过一个或多个callback functions(回调函数)与你的应用程序进行通信这些函数和windows程序使用的回调函数相似。你的应用程序初始化期间执行这些callback function并传递一个这个函数的指针。当DirectPlay需要与你的程序通讯时,它调用callback function,并且传递两个重要信息:
1 一个表明消息类别的消息标识(ID)。
2 一个数据块指针,代表一个结构体,提供任何需要的细节。
示例
例如:
HRESULT WINAPI DirectPlayMessageHandler( PVOID pvUserContext, DWORD dwMessageId,PVOID pMsgBuffer)
{return S_OK;}
比如,当一个发送上面的信息的消息到目标,目标程序的callback function将接收到一条具有DPNMSGID_RECEIVE消息ID的消息,指示一条消息已经被其它用户收到。相伴的结构体包括了数据。
因为大多数的DirectPlay消息是多线程的,其中关键就是callback function如何被恰当的执行。
DirectPlay创建和管理会话
一个游戏会话是一个特定的多人游戏的实例。一个会话具有两个或多个用户同时游戏,每个在他或她的计算机上具有同样的游戏客户端。一个玩家(player)是一个在游戏中自身的实体,并被特定游戏所定义。一个用户可能在一个游戏中具有不只一个的玩家角色。然而,游戏应用程序必须自己管理这些玩家,用对于每一个玩家单独的DirectPlay接口或对象。
创建会话的第一步就是集中一组用户。有两种方式:
1 大多数游戏会话都被一个运行在远程计算机上大厅程序(lobby application)所管理。这种方式被用于大多数基于Internet的游戏。
2、也可以通过单独的用户计算机与其它人的进行通信来管理游戏。这一方式被限定于一组所有潜在用户都在同一个局域网中的情况下。
一旦会话被建立,游戏就被启动并且游戏玩家开始游戏。游戏进行中,玩家可能离开会话或者新的玩家加入。细节取决于特定的游戏。
在多人游戏中,每一用户的用户界面(user interface (UI))能被会话中的所有其它用户所同步。管理多玩家会话因而需要一个连续的从其它用户发出或到达其它用户的消息流。例如,每次一个玩家移动,一条消息必须被发送以在这一会话中的所有其它游戏客户端更新这一玩家的位置。DirectPlay的核心就是这一部分的API支持在所有在一个会话中的所有计算机间高效灵活的消息机制。
有两种基本的一个会话消息机制布局(topology)的结构的方法:一种是点对点,一种是客户/服务模式(peer-to-peer and client/server)。两种布局都有它们的优点和限制,因而你将需要评估哪一种更适合你的游戏。
全国各地天气预报查询

上海市

  • 市辖区
  • 云南省

  • 临沧市
  • 云南省

  • 丽江市
  • 云南省

  • 保山市
  • 云南省

  • 大理白族自治州
  • 云南省

  • 德宏傣族景颇族自治州
  • 云南省

  • 怒江傈僳族自治州
  • 云南省

  • 文山壮族苗族自治州
  • 云南省

  • 昆明市
  • 云南省

  • 昭通市
  • 云南省

  • 普洱市
  • 云南省

  • 曲靖市
  • 云南省

  • 楚雄彝族自治州
  • 云南省

  • 玉溪市
  • 云南省

  • 红河哈尼族彝族自治州
  • 云南省

  • 西双版纳傣族自治州
  • 云南省

  • 迪庆藏族自治州
  • 内蒙古自治区

  • 乌兰察布市
  • 内蒙古自治区

  • 乌海市
  • 内蒙古自治区

  • 兴安盟
  • 内蒙古自治区

  • 包头市
  • 内蒙古自治区

  • 呼伦贝尔市
  • 内蒙古自治区

  • 呼和浩特市
  • 内蒙古自治区

  • 巴彦淖尔市
  • 内蒙古自治区

  • 赤峰市
  • 内蒙古自治区

  • 通辽市
  • 内蒙古自治区

  • 鄂尔多斯市
  • 内蒙古自治区

  • 锡林郭勒盟
  • 内蒙古自治区

  • 阿拉善盟
  • 北京市

  • 市辖区
  • 吉林省

  • 吉林市
  • 吉林省

  • 四平市
  • 吉林省

  • 延边朝鲜族自治州
  • 吉林省

  • 松原市
  • 吉林省

  • 白城市
  • 吉林省

  • 白山市
  • 吉林省

  • 辽源市
  • 吉林省

  • 通化市
  • 吉林省

  • 长春市
  • 四川省

  • 乐山市
  • 四川省

  • 内江市
  • 四川省

  • 凉山彝族自治州
  • 四川省

  • 南充市
  • 四川省

  • 宜宾市
  • 四川省

  • 巴中市
  • 四川省

  • 广元市
  • 四川省

  • 广安市
  • 四川省

  • 德阳市
  • 四川省

  • 成都市
  • 四川省

  • 攀枝花市
  • 四川省

  • 泸州市
  • 四川省

  • 甘孜藏族自治州
  • 四川省

  • 眉山市
  • 四川省

  • 绵阳市
  • 四川省

  • 自贡市
  • 四川省

  • 资阳市
  • 四川省

  • 达州市
  • 四川省

  • 遂宁市
  • 四川省

  • 阿坝藏族羌族自治州
  • 四川省

  • 雅安市
  • 天津市

  • 市辖区
  • 宁夏回族自治区

  • 中卫市
  • 宁夏回族自治区

  • 吴忠市
  • 宁夏回族自治区

  • 固原市
  • 宁夏回族自治区

  • 石嘴山市
  • 宁夏回族自治区

  • 银川市
  • 安徽省

  • 亳州市
  • 安徽省

  • 六安市
  • 安徽省

  • 合肥市
  • 安徽省

  • 安庆市
  • 安徽省

  • 宣城市
  • 安徽省

  • 宿州市
  • 安徽省

  • 池州市
  • 安徽省

  • 淮北市
  • 安徽省

  • 淮南市
  • 安徽省

  • 滁州市
  • 安徽省

  • 芜湖市
  • 安徽省

  • 蚌埠市
  • 安徽省

  • 铜陵市
  • 安徽省

  • 阜阳市
  • 安徽省

  • 马鞍山市
  • 安徽省

  • 黄山市
  • 山东省

  • 东营市
  • 山东省

  • 临沂市
  • 山东省

  • 威海市
  • 山东省

  • 德州市
  • 山东省

  • 日照市
  • 山东省

  • 枣庄市
  • 山东省

  • 泰安市
  • 山东省

  • 济南市
  • 山东省

  • 济宁市
  • 山东省

  • 淄博市
  • 山东省

  • 滨州市
  • 山东省

  • 潍坊市
  • 山东省

  • 烟台市
  • 山东省

  • 聊城市
  • 山东省

  • 菏泽市
  • 山东省

  • 青岛市
  • 山西省

  • 临汾市
  • 山西省

  • 吕梁市
  • 山西省

  • 大同市
  • 山西省

  • 太原市
  • 山西省

  • 忻州市
  • 山西省

  • 晋中市
  • 山西省

  • 晋城市
  • 山西省

  • 朔州市
  • 山西省

  • 运城市
  • 山西省

  • 长治市
  • 山西省

  • 阳泉市
  • 广东省

  • 东莞市
  • 广东省

  • 中山市
  • 广东省

  • 云浮市
  • 广东省

  • 佛山市
  • 广东省

  • 广州市
  • 广东省

  • 惠州市
  • 广东省

  • 揭阳市
  • 广东省

  • 梅州市
  • 广东省

  • 汕头市
  • 广东省

  • 汕尾市
  • 广东省

  • 江门市
  • 广东省

  • 河源市
  • 广东省

  • 深圳市
  • 广东省

  • 清远市
  • 广东省

  • 湛江市
  • 广东省

  • 潮州市
  • 广东省

  • 珠海市
  • 广东省

  • 肇庆市
  • 广东省

  • 茂名市
  • 广东省

  • 阳江市
  • 广东省

  • 韶关市
  • 广西壮族自治区

  • 北海市
  • 广西壮族自治区

  • 南宁市
  • 广西壮族自治区

  • 崇左市
  • 广西壮族自治区

  • 来宾市
  • 广西壮族自治区

  • 柳州市
  • 广西壮族自治区

  • 桂林市
  • 广西壮族自治区

  • 梧州市
  • 广西壮族自治区

  • 河池市
  • 广西壮族自治区

  • 玉林市
  • 广西壮族自治区

  • 百色市
  • 广西壮族自治区

  • 贵港市
  • 广西壮族自治区

  • 贺州市
  • 广西壮族自治区

  • 钦州市
  • 广西壮族自治区

  • 防城港市
  • 新疆维吾尔自治区

  • 乌鲁木齐市
  • 新疆维吾尔自治区

  • 伊犁哈萨克自治州
  • 新疆维吾尔自治区

  • 克孜勒苏柯尔克孜自治州
  • 新疆维吾尔自治区

  • 克拉玛依市
  • 新疆维吾尔自治区

  • 博尔塔拉蒙古自治州
  • 新疆维吾尔自治区

  • 吐鲁番市
  • 新疆维吾尔自治区

  • 和田地区
  • 新疆维吾尔自治区

  • 哈密市
  • 新疆维吾尔自治区

  • 喀什地区
  • 新疆维吾尔自治区

  • 塔城地区
  • 新疆维吾尔自治区

  • 巴音郭楞蒙古自治州
  • 新疆维吾尔自治区

  • 昌吉回族自治州
  • 新疆维吾尔自治区

  • 自治区直辖县级行政区划
  • 新疆维吾尔自治区

  • 阿克苏地区
  • 新疆维吾尔自治区

  • 阿勒泰地区
  • 江苏省

  • 南京市
  • 江苏省

  • 南通市
  • 江苏省

  • 宿迁市
  • 江苏省

  • 常州市
  • 江苏省

  • 徐州市
  • 江苏省

  • 扬州市
  • 江苏省

  • 无锡市
  • 江苏省

  • 泰州市
  • 江苏省

  • 淮安市
  • 江苏省

  • 盐城市
  • 江苏省

  • 苏州市
  • 江苏省

  • 连云港市
  • 江苏省

  • 镇江市
  • 江西省

  • 上饶市
  • 江西省

  • 九江市
  • 江西省

  • 南昌市
  • 江西省

  • 吉安市
  • 江西省

  • 宜春市
  • 江西省

  • 抚州市
  • 江西省

  • 新余市
  • 江西省

  • 景德镇市
  • 江西省

  • 萍乡市
  • 江西省

  • 赣州市
  • 江西省

  • 鹰潭市
  • 河北省

  • 保定市
  • 河北省

  • 唐山市
  • 河北省

  • 廊坊市
  • 河北省

  • 张家口市
  • 河北省

  • 承德市
  • 河北省

  • 沧州市
  • 河北省

  • 石家庄市
  • 河北省

  • 秦皇岛市
  • 河北省

  • 衡水市
  • 河北省

  • 邢台市
  • 河北省

  • 邯郸市
  • 河南省

  • 三门峡市
  • 河南省

  • 信阳市
  • 河南省

  • 南阳市
  • 河南省

  • 周口市
  • 河南省

  • 商丘市
  • 河南省

  • 安阳市
  • 河南省

  • 平顶山市
  • 河南省

  • 开封市
  • 河南省

  • 新乡市
  • 河南省

  • 洛阳市
  • 河南省

  • 漯河市
  • 河南省

  • 濮阳市
  • 河南省

  • 焦作市
  • 河南省

  • 省直辖县级行政区划
  • 河南省

  • 许昌市
  • 河南省

  • 郑州市
  • 河南省

  • 驻马店市
  • 河南省

  • 鹤壁市
  • 浙江省

  • 丽水市
  • 浙江省

  • 台州市
  • 浙江省

  • 嘉兴市
  • 浙江省

  • 宁波市
  • 浙江省

  • 杭州市
  • 浙江省

  • 温州市
  • 浙江省

  • 湖州市
  • 浙江省

  • 绍兴市
  • 浙江省

  • 舟山市
  • 浙江省

  • 衢州市
  • 浙江省

  • 金华市
  • 海南省

  • 三亚市
  • 海南省

  • 三沙市
  • 海南省

  • 儋州市
  • 海南省

  • 海口市
  • 海南省

  • 省直辖县级行政区划
  • 湖北省

  • 十堰市
  • 湖北省

  • 咸宁市
  • 湖北省

  • 孝感市
  • 湖北省

  • 宜昌市
  • 湖北省

  • 恩施土家族苗族自治州
  • 湖北省

  • 武汉市
  • 湖北省

  • 省直辖县级行政区划
  • 湖北省

  • 荆州市
  • 湖北省

  • 荆门市
  • 湖北省

  • 襄阳市
  • 湖北省

  • 鄂州市
  • 湖北省

  • 随州市
  • 湖北省

  • 黄冈市
  • 湖北省

  • 黄石市
  • 湖南省

  • 娄底市
  • 湖南省

  • 岳阳市
  • 湖南省

  • 常德市
  • 湖南省

  • 张家界市
  • 湖南省

  • 怀化市
  • 湖南省

  • 株洲市
  • 湖南省

  • 永州市
  • 湖南省

  • 湘潭市
  • 湖南省

  • 湘西土家族苗族自治州
  • 湖南省

  • 益阳市
  • 湖南省

  • 衡阳市
  • 湖南省

  • 邵阳市
  • 湖南省

  • 郴州市
  • 湖南省

  • 长沙市
  • 甘肃省

  • 临夏回族自治州
  • 甘肃省

  • 兰州市
  • 甘肃省

  • 嘉峪关市
  • 甘肃省

  • 天水市
  • 甘肃省

  • 定西市
  • 甘肃省

  • 平凉市
  • 甘肃省

  • 庆阳市
  • 甘肃省

  • 张掖市
  • 甘肃省

  • 武威市
  • 甘肃省

  • 甘南藏族自治州
  • 甘肃省

  • 白银市
  • 甘肃省

  • 酒泉市
  • 甘肃省

  • 金昌市
  • 甘肃省

  • 陇南市
  • 福建省

  • 三明市
  • 福建省

  • 南平市
  • 福建省

  • 厦门市
  • 福建省

  • 宁德市
  • 福建省

  • 泉州市
  • 福建省

  • 漳州市
  • 福建省

  • 福州市
  • 福建省

  • 莆田市
  • 福建省

  • 龙岩市
  • 西藏自治区

  • 山南市
  • 西藏自治区

  • 拉萨市
  • 西藏自治区

  • 日喀则市
  • 西藏自治区

  • 昌都市
  • 西藏自治区

  • 林芝市
  • 西藏自治区

  • 那曲市
  • 西藏自治区

  • 阿里地区
  • 贵州省

  • 六盘水市
  • 贵州省

  • 安顺市
  • 贵州省

  • 毕节市
  • 贵州省

  • 贵阳市
  • 贵州省

  • 遵义市
  • 贵州省

  • 铜仁市
  • 贵州省

  • 黔东南苗族侗族自治州
  • 贵州省

  • 黔南布依族苗族自治州
  • 贵州省

  • 黔西南布依族苗族自治州
  • 辽宁省

  • 丹东市
  • 辽宁省

  • 大连市
  • 辽宁省

  • 抚顺市
  • 辽宁省

  • 朝阳市
  • 辽宁省

  • 本溪市
  • 辽宁省

  • 沈阳市
  • 辽宁省

  • 盘锦市
  • 辽宁省

  • 营口市
  • 辽宁省

  • 葫芦岛市
  • 辽宁省

  • 辽阳市
  • 辽宁省

  • 铁岭市
  • 辽宁省

  • 锦州市
  • 辽宁省

  • 阜新市
  • 辽宁省

  • 鞍山市
  • 重庆市

  • 重庆市

  • 市辖区
  • 陕西省

  • 咸阳市
  • 陕西省

  • 商洛市
  • 陕西省

  • 安康市
  • 陕西省

  • 宝鸡市
  • 陕西省

  • 延安市
  • 陕西省

  • 榆林市
  • 陕西省

  • 汉中市
  • 陕西省

  • 渭南市
  • 陕西省

  • 西安市
  • 陕西省

  • 铜川市
  • 青海省

  • 果洛藏族自治州
  • 青海省

  • 海东市
  • 青海省

  • 海北藏族自治州
  • 青海省

  • 海南藏族自治州
  • 青海省

  • 海西蒙古族藏族自治州
  • 青海省

  • 玉树藏族自治州
  • 青海省

  • 西宁市
  • 青海省

  • 黄南藏族自治州
  • 黑龙江省

  • 七台河市
  • 黑龙江省

  • 伊春市
  • 黑龙江省

  • 佳木斯市
  • 黑龙江省

  • 双鸭山市
  • 黑龙江省

  • 哈尔滨市
  • 黑龙江省

  • 大兴安岭地区
  • 黑龙江省

  • 大庆市
  • 黑龙江省

  • 牡丹江市
  • 黑龙江省

  • 绥化市
  • 黑龙江省

  • 鸡西市
  • 黑龙江省

  • 鹤岗市
  • 黑龙江省

  • 黑河市
  • 黑龙江省

  • 齐齐哈尔市