最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

javaGUI實(shí)現(xiàn)多人聊天功能

 更新時間:2022年09月15日 16:27:03   作者:段茜琳  
這篇文章主要為大家詳細(xì)介紹了javaGUI實(shí)現(xiàn)多人聊天功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了javaGUI實(shí)現(xiàn)多人聊天的具體代碼,供大家參考,具體內(nèi)容如下

服務(wù)器

package com.ff.chat.chatserver.frame;

import javax.swing.*;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.EOFException;
import java.io.IOException;
import java.net.BindException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.Iterator;

public class ServerFrame extends JFrame {
? ? JTextArea msgArea;
? ? ArrayList<Socket> socketArrayList = new ArrayList<>();
? ? boolean serverFlag = true;//服務(wù)器啟動標(biāo)志
? ? StringBuffer sb = new StringBuffer();
? ? ServerSocket serverSocket;
? ? //創(chuàng)建服務(wù)器端的顯示窗口
? ? public void creatFrame(){
? ? ? ? this.setTitle("聊天室-服務(wù)器端");
? ? ? ? this.setSize(500,500);
? ? ? ? this.setLocationRelativeTo(null);
? ? ? ? this.setResizable(false);
? ? ? ? this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

? ? ? ? //創(chuàng)建一個面板
? ? ? ? JPanel jp = new JPanel(new BorderLayout());

? ? ? ? //中間面板
? ? ? ? JPanel centerPanel = new JPanel();
? ? ? ? msgArea = new JTextArea(30,40);
? ? ? ? msgArea.setEditable(false);
? ? ? ? JScrollPane jsp = new JScrollPane(msgArea);
? ? ? ? centerPanel.add(jsp);

? ? ? ? jp.add(centerPanel);

? ? ? ? this.add(jp);
? ? ? ? this.setVisible(true);
? ? ? ? this.addWindowListener(new WindowAdapter() {
? ? ? ? ? ? @Override
? ? ? ? ? ? public void windowClosing(WindowEvent e) {
? ? ? ? ? ? ? ? int res = JOptionPane.showConfirmDialog(null,"確定要關(guān)閉服務(wù)器嗎?",
? ? ? ? ? ? ? ? ? ? ? ? "操作提示",JOptionPane.OK_CANCEL_OPTION);
? ? ? ? ? ? ? ? if(res == 0){
? ? ? ? ? ? ? ? ? ? try {
? ? ? ? ? ? ? ? ? ? ? ? dispose();
? ? ? ? ? ? ? ? ? ? ? ? serverSocket.close();
? ? ? ? ? ? ? ? ? ? } catch (IOException ioException) {
? ? ? ? ? ? ? ? ? ? ? ? ioException.printStackTrace();
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? });
? ? }

? ? //啟動服務(wù)器,創(chuàng)建ServerSocket
? ? public void startServer(){
? ? ? ? try {
? ? ? ? ? ? //創(chuàng)建ServerSocket
? ? ? ? ? ? serverSocket = new ServerSocket(9998);
? ? ? ? ? ? System.out.println("等待客戶端連接");

? ? ? ? ? ? //循環(huán)監(jiān)聽客戶端連接
? ? ? ? ? ? while (serverFlag){
? ? ? ? ? ? ? ? if(serverSocket.isClosed()){
? ? ? ? ? ? ? ? ? ? serverFlag = false;
? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? Socket socket = serverSocket.accept();

? ? ? ? ? ? ? ? System.out.println("客戶端連接成功");
? ? ? ? ? ? ? ? socketArrayList.add(socket);

? ? ? ? ? ? ? ? //為每一個客戶端開啟一個線程,監(jiān)聽客戶端發(fā)來的消息
? ? ? ? ? ? ? ? new ServerThread(socket).start();
? ? ? ? ? ? }

? ? ? ? } catch (BindException b) {
? ? ? ? ? ? b.printStackTrace();
? ? ? ? ? ? System.out.println("服務(wù)器端口被占用");
? ? ? ? ? ? System.exit(0);
? ? ? ? } catch (IOException e) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? ? ? System.out.println("服務(wù)器啟動失敗");
? ? ? ? ? ? serverFlag = false;
? ? ? ? }
? ? }

? ? //創(chuàng)建一個內(nèi)部類,開啟一個線程,接收消息
? ? class ServerThread extends Thread{
? ? ? ? Socket socket;
? ? ? ? DataInputStream in;
? ? ? ? DataOutputStream out;
? ? ? ? boolean clientFlag = true;

? ? ? ? public ServerThread(Socket socket){
? ? ? ? ? ? this.socket = socket;
? ? ? ? ? ? try {
? ? ? ? ? ? ? ? this.in = new DataInputStream(socket.getInputStream());
? ? ? ? ? ? } catch (IOException e) {
? ? ? ? ? ? ? ? e.printStackTrace();
? ? ? ? ? ? }
? ? ? ? }

? ? ? ? @Override
? ? ? ? public void run() {
? ? ? ? ? ? //監(jiān)聽接收客戶端發(fā)送的消息
? ? ? ? ? ? while (clientFlag){
? ? ? ? ? ? ? ? if(socket.isClosed()){
? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? try {
? ? ? ? ? ? ? ? ? ? String msg = in.readUTF();//讀到客戶端發(fā)送的消息
? ? ? ? ? ? ? ? ? ? sb.append(msg+"\n");
? ? ? ? ? ? ? ? ? ? System.out.println(sb);
? ? ? ? ? ? ? ? ? ? msgArea.setText(sb.toString());

? ? ? ? ? ? ? ? ? ? //從服務(wù)器端向客戶端發(fā)送消息
? ? ? ? ? ? ? ? ? ? if(socketArrayList.size() > 0){
? ? ? ? ? ? ? ? ? ? ? ? Iterator<Socket> it = socketArrayList.iterator();
? ? ? ? ? ? ? ? ? ? ? ? while (it.hasNext()){
? ? ? ? ? ? ? ? ? ? ? ? ? ? Socket soc = it.next();
? ? ? ? ? ? ? ? ? ? ? ? ? ? if(soc.isClosed()){//當(dāng)客戶端某個socket已經(jīng)為關(guān)閉狀態(tài),移除此socket
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? it.remove();
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? continue;
? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ? //客戶端socket如果沒有關(guān)閉,向客戶端發(fā)送消息
? ? ? ? ? ? ? ? ? ? ? ? ? ? out = new DataOutputStream(soc.getOutputStream());
? ? ? ? ? ? ? ? ? ? ? ? ? ? out.writeUTF(sb.toString());
? ? ? ? ? ? ? ? ? ? ? ? ? ? out.flush();
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? } catch (EOFException ef){
? ? ? ? ? ? ? ? ? ? System.out.println("ip為:"+socket.getInetAddress()+"的客戶端下線了");
? ? ? ? ? ? ? ? ? ? clientFlag = false;
? ? ? ? ? ? ? ? }catch (IOException e) {
? ? ? ? ? ? ? ? ? ? e.printStackTrace();
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }
? ? }
}
package com.ff.chat.chatserver.frame;

public class ServerRun {

? ? public static void main(String[] args) {
? ? ? ? ServerFrame serverFrame = new ServerFrame();
? ? ? ? serverFrame.creatFrame();
? ? ? ? serverFrame.startServer();

? ? }
}

客戶端

注意:要在自己的電腦上運(yùn)行多次客戶端需要勾選如下選項(xiàng)

1.登錄界面

package com.ff.chat.chatclient.frame;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.net.Socket;

public class LoginFrame extends JFrame {

? ? JTextField accountField = null;

? ? //創(chuàng)建窗口
? ? public void creatFrame(){
? ? ? ? this.setTitle("聊天窗口");
? ? ? ? this.setSize(400,400);
? ? ? ? this.setResizable(false);
? ? ? ? this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
? ? ? ? this.setLocationRelativeTo(null);

? ? ? ? /*
? ? ? ? * 創(chuàng)建一個4行1列的面板
? ? ? ? * */
? ? ? ? JPanel jp = new JPanel(new GridLayout(4,1));

? ? ? ? //歡迎登陸面板
? ? ? ? JPanel welcomePanel = new JPanel();
? ? ? ? JLabel welcomLabel = new JLabel("歡迎登陸");
? ? ? ? welcomePanel.add(welcomLabel);

? ? ? ? //賬號面板
? ? ? ? JPanel accountPanel = new JPanel();
? ? ? ? JLabel accountLabel = new JLabel("賬號");
? ? ? ? accountField = new JTextField(15);
? ? ? ? accountPanel.add(accountLabel);
? ? ? ? accountPanel.add(accountField);

? ? ? ? //密碼面板
? ? ? ? JPanel passwordPanel = new JPanel();
? ? ? ? JLabel passwordLabel = new JLabel("密碼");
? ? ? ? JPasswordField passwordField = new JPasswordField(15);
? ? ? ? passwordPanel.add(passwordLabel);
? ? ? ? passwordPanel.add(passwordField);

? ? ? ? //登錄按鈕面板
? ? ? ? JPanel btnPanel = new JPanel();
? ? ? ? JButton loginBtn = new JButton("登錄");
? ? ? ? JButton regBtn = new JButton("注冊");
? ? ? ? btnPanel.add(loginBtn);
? ? ? ? btnPanel.add(regBtn);

? ? ? ? jp.add(welcomePanel);
? ? ? ? jp.add(accountPanel);
? ? ? ? jp.add(passwordPanel);
? ? ? ? jp.add(btnPanel);
? ? ? ? this.add(jp);

? ? ? ? this.setVisible(true);

? ? ? ? //組件綁定事件監(jiān)聽
? ? ? ? loginBtn.addActionListener(new ActionListener() {
? ? ? ? ? ? @Override
? ? ? ? ? ? public void actionPerformed(ActionEvent e) {
? ? ? ? ? ? ? ? //獲得賬號密碼
? ? ? ? ? ? ? ? String account = accountField.getText();
? ? ? ? ? ? ? ? String password = new String(passwordField.getPassword());
? ? ? ? ? ? ? ? if(account.length() == 0){
? ? ? ? ? ? ? ? ? ? JOptionPane.showMessageDialog(null,"賬號不能為空",
? ? ? ? ? ? ? ? ? ? ? ? ? ? "操作提示",JOptionPane.WARNING_MESSAGE);
? ? ? ? ? ? ? ? ? ? return;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? if(password.length() == 0){
? ? ? ? ? ? ? ? ? ? JOptionPane.showMessageDialog(null,"密碼不能為空",
? ? ? ? ? ? ? ? ? ? ? ? ? ? "操作提示",JOptionPane.WARNING_MESSAGE);
? ? ? ? ? ? ? ? ? ? return;
? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? //預(yù)留2.0版本 與數(shù)據(jù)庫交互

? ? ? ? ? ? ? ? //連接服務(wù)器,創(chuàng)建Socket對象
? ? ? ? ? ? ? ? try {
? ? ? ? ? ? ? ? ? ? Socket socket = new Socket("192.168.31.179",9998);//該地址為要連接的服務(wù)器的地址
? ? ? ? ? ? ? ? ? ? new ClientFrame(socket,account).creatFrame();
? ? ? ? ? ? ? ? ? ? dispose(); //釋放當(dāng)前登錄窗口
? ? ? ? ? ? ? ? } catch (IOException ioException) {
? ? ? ? ? ? ? ? ? ? ioException.printStackTrace();
? ? ? ? ? ? ? ? ? ? JOptionPane.showMessageDialog(null,"服務(wù)器連接失敗",
? ? ? ? ? ? ? ? ? ? ? ? ? ? "操作提示",JOptionPane.WARNING_MESSAGE);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? });
? ? }


}

2.聊天界面

package com.ff.chat.chatclient.frame;

import com.ff.chat.chatclient.utils.DateUtil;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.util.Date;

public class ClientFrame extends JFrame {

? ? String account;
? ? Socket socket;
? ? DataOutputStream out;//數(shù)據(jù)輸出字節(jié)流
? ? DataInputStream in;//數(shù)據(jù)輸入字節(jié)流
? ? JTextArea msgArea;


? ? //創(chuàng)建聊天窗口時,初始化數(shù)據(jù)
? ? public ClientFrame(Socket socket,String account){
? ? ? ? this.socket = socket;
? ? ? ? this.account = account;
? ? ? ? try {
? ? ? ? ? ? out = new DataOutputStream(socket.getOutputStream());
? ? ? ? ? ? in = new DataInputStream(socket.getInputStream());
? ? ? ? } catch (IOException e) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? }

? ? }
? ? //創(chuàng)建聊天窗口
? ? public void creatFrame(){
? ? ? ? this.setTitle("聊天窗口-"+account);
? ? ? ? this.setSize(500,500);
? ? ? ? this.setResizable(false);
? ? ? ? this.setLocationRelativeTo(null);
? ? ? ? this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

? ? ? ? //創(chuàng)建一個面板
? ? ? ? JPanel jp = new JPanel(new BorderLayout());

? ? ? ? //中間面板
? ? ? ? JPanel centerPanel = new JPanel();
? ? ? ? msgArea = new JTextArea(30,40);
? ? ? ? msgArea.setEditable(false);//不可以直接編輯
? ? ? ? JScrollPane jsp = new JScrollPane(msgArea);
? ? ? ? centerPanel.add(jsp);

? ? ? ? //底部面板
? ? ? ? JPanel bottomPanel = new JPanel();
? ? ? ? JTextField msg = new JTextField(30);
? ? ? ? JButton sendBtn = new JButton("發(fā)送");
? ? ? ? bottomPanel.add(msg);
? ? ? ? bottomPanel.add(sendBtn);

? ? ? ? jp.add(centerPanel);
? ? ? ? jp.add(bottomPanel,BorderLayout.SOUTH);

? ? ? ? this.add(jp);
? ? ? ? this.setVisible(true);

? ? ? ? //發(fā)送按鈕添加監(jiān)聽事件
? ? ? ? sendBtn.addActionListener(new ActionListener() {
? ? ? ? ? ? @Override
? ? ? ? ? ? public void actionPerformed(ActionEvent e) {
? ? ? ? ? ? ? ? String m = msg.getText(); //獲得客戶端輸入的聊天內(nèi)容
? ? ? ? ? ? ? ? if(m.length() == 0){
? ? ? ? ? ? ? ? ? ? JOptionPane.showMessageDialog(null,"不能發(fā)送空白消息");
? ? ? ? ? ? ? ? ? ? return;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? //向服務(wù)器發(fā)送消息
? ? ? ? ? ? ? ? try {
? ? ? ? ? ? ? ? ? ? String ms = account+":"+DateUtil.dateStr(new Date())+"\n"+m;
? ? ? ? ? ? ? ? ? ? out.writeUTF(ms);//向服務(wù)器發(fā)送消息
? ? ? ? ? ? ? ? ? ? out.flush();
? ? ? ? ? ? ? ? ? ? msg.setText("");//發(fā)送成功,清空聊天文本框
? ? ? ? ? ? ? ? } catch (IOException ioException) {
? ? ? ? ? ? ? ? ? ? ioException.printStackTrace();
? ? ? ? ? ? ? ? ? ? JOptionPane.showMessageDialog(null,"服務(wù)器連接失敗");
? ? ? ? ? ? ? ? }

? ? ? ? ? ? }
? ? ? ? });

? ? ? ? //聊天窗口添加事件監(jiān)聽
? ? ? ? this.addWindowListener(new WindowAdapter() {
? ? ? ? ? ? @Override
? ? ? ? ? ? public void windowClosing(WindowEvent e) {
? ? ? ? ? ? ? ? int res = JOptionPane.showConfirmDialog(null,"你確定要退出嗎?",
? ? ? ? ? ? ? ? ? ? ? ? "操作提示",JOptionPane.OK_CANCEL_OPTION);
? ? ? ? ? ? ? ? if(res == 0){
? ? ? ? ? ? ? ? ? ? dispose();
? ? ? ? ? ? ? ? ? ? new LoginFrame().creatFrame();
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? try {
? ? ? ? ? ? ? ? ? ? socket.close();
? ? ? ? ? ? ? ? } catch (IOException ioException) {
? ? ? ? ? ? ? ? ? ? ioException.printStackTrace();
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? });

? ? ? ? //啟動一個線程,監(jiān)聽服務(wù)器是否向客戶端發(fā)送了消息
? ? ? ? new ClientThread(socket).start();
? ? }

? ? //創(chuàng)建一個內(nèi)部類
? ? class ClientThread extends Thread{
? ? ? ? //接收從服務(wù)器發(fā)來的消息
? ? ? ? Socket socket;
? ? ? ? boolean serverFlag = true;

? ? ? ? public ClientThread(Socket socket){
? ? ? ? ? ? this.socket = socket;
? ? ? ? }

? ? ? ? @Override
? ? ? ? public void run(){
? ? ? ? ? ? //監(jiān)聽接收服務(wù)器發(fā)來的消息
? ? ? ? ? ? while (serverFlag){
? ? ? ? ? ? ? ? try {
? ? ? ? ? ? ? ? ? ? String ms = in.readUTF();
? ? ? ? ? ? ? ? ? ? msgArea.setText(ms);
? ? ? ? ? ? ? ? } catch (IOException e) {
? ? ? ? ? ? ? ? ? ? System.out.println("客戶端"+account+"下線了");
? ? ? ? ? ? ? ? ? ? serverFlag = false;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }
? ? }
}

3.運(yùn)行客戶端

package com.ff.chat.chatclient.frame;

public class ClientRun {

? ? public static void main(String[] args) {
? ? ? ? new LoginFrame().creatFrame();
? ? }
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • JVM實(shí)戰(zhàn)系列之CPU100%和內(nèi)存100%排查

    JVM實(shí)戰(zhàn)系列之CPU100%和內(nèi)存100%排查

    本文主要介紹了JVM實(shí)戰(zhàn)系列之CPU100%和內(nèi)存100%排查,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • SpringSecurity中內(nèi)置過濾器的使用小結(jié)

    SpringSecurity中內(nèi)置過濾器的使用小結(jié)

    SpringSecurity通過其復(fù)雜的過濾器鏈機(jī)制,為Java應(yīng)用提供了全面的安全防護(hù),本文主要介紹了SpringSecurity中內(nèi)置過濾器的使用小結(jié),感性的可以了解一下
    2025-03-03
  • 如何基于Java實(shí)現(xiàn)對象List排序

    如何基于Java實(shí)現(xiàn)對象List排序

    這篇文章主要介紹了如何基于Java實(shí)現(xiàn)對象List排序,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-01-01
  • 一篇文章帶你了解Java SpringMVC返回null

    一篇文章帶你了解Java SpringMVC返回null

    這篇文章主要介紹了Spring MVC返回null,文中講的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2021-10-10
  • Java中自動裝箱、拆箱引起的耗時詳解

    Java中自動裝箱、拆箱引起的耗時詳解

    這篇文章主要給大家介紹了關(guān)于Java中自動裝箱、拆箱引起的耗時的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Java中使用異或運(yùn)算符實(shí)現(xiàn)加密字符串

    Java中使用異或運(yùn)算符實(shí)現(xiàn)加密字符串

    這篇文章主要介紹了Java中使用異或運(yùn)算符實(shí)現(xiàn)加密字符串,本文直接給出實(shí)現(xiàn)代碼,以及運(yùn)算結(jié)果加密實(shí)例,需要的朋友可以參考下
    2015-06-06
  • Spring動態(tài)數(shù)據(jù)源實(shí)現(xiàn)讀寫分離詳解

    Spring動態(tài)數(shù)據(jù)源實(shí)現(xiàn)讀寫分離詳解

    這篇文章主要為大家詳細(xì)介紹了Spring動態(tài)數(shù)據(jù)源實(shí)現(xiàn)讀寫分離,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • mybatis之批量添加問題

    mybatis之批量添加問題

    這篇文章主要介紹了mybatis之批量添加問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Java定義泛型接口和類的方法實(shí)例分析

    Java定義泛型接口和類的方法實(shí)例分析

    這篇文章主要介紹了Java定義泛型接口和類的方法,結(jié)合實(shí)例形式分析了泛型相關(guān)概念、原理及泛型接口與類的定義實(shí)現(xiàn)方法,需要的朋友可以參考下
    2019-08-08
  • JAVA判斷空值方法原理解析

    JAVA判斷空值方法原理解析

    這篇文章主要介紹了JAVA判斷空值方法原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-05-05

最新評論

松原市| 韶关市| 徐水县| 珠海市| 古蔺县| 托里县| 南和县| 呼和浩特市| 濮阳市| 桐柏县| 饶河县| 乌鲁木齐市| 呼玛县| 襄垣县| 昌邑市| 育儿| 噶尔县| 泉州市| 柏乡县| 八宿县| 河津市| 措美县| 张家港市| 贡山| 婺源县| 德格县| 三江| 通辽市| 新绛县| 南阳市| 湖北省| 加查县| 玉田县| 丰宁| 甘泉县| 邯郸市| 措勤县| 屏山县| 英山县| 翁牛特旗| 玉龙|