日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

具有多客戶端通信的Java Server。

瀏覽:173日期:2024-04-24 10:22:21
如何解決具有多客戶端通信的Java Server。?

在這里,我與您分享了一個不錯的 ,其中包含一臺服務器,該服務器根據您的要求使用TCP協議與多個客戶端進行通信。

程序包含:

@H_403_5@無論在何處添加新客戶,都會通知每個客戶及其名稱和職位。@H_403_5@它還會檢查現有名稱。程序不允許多個客戶端使用相同的名稱。

使用此程序作為游戲的初始啟動器。如果您想在程序中添加新功能,請告訴我。

這是代碼(有關更多說明,請參見代碼注釋):

在端口號1234上運行此程序之前,請先替換LiveChatClient.java文件中的主機名。

運行程序的步驟:

@H_403_5@第一次只運行LiveChatServer@H_403_5@然后為要添加的多個客戶端運行LiveChatClient

用于設置客戶端-服務器通信協議的操作代碼

package com.chat;/**************** an interface to define different operation code **************/public interface Opcode { int CLIENT_CONNECTEING = 1; int CLIENT_CONNECTED = 2;}

控制多個客戶端的單個服務器

package com.chat;/************************ Live Chat Server *******************/import java.io.IOException;import java.net.InetAddress;import java.net.ServerSocket;import java.net.socket;import java.util.HashMap;import java.util.LinkedHashMap;public class LiveChatServer { // Connection state info private static LinkedHashMap<String, ClientThread> clientInfo = new LinkedHashMap<String, ClientThread>(); // TCP Components private ServerSocket serverSocket; // Main Constructor public LiveChatServer() {startServer();// start the server } public void startServer() {String port = '1234';try { // in constractor we are passing port no, back log and bind address whick will be local // host // port no - the specified port, or 0 to use any free port. // backlog - the maximum length of the queue. use default if it is equal or less than 0 // bindAddr - the local InetAddress the server will bind to int portNo = Integer.valueOf(port); serverSocket = new ServerSocket(portNo, 0, InetAddress.getLocalHost()); System.out.println(serverSocket); System.out.println(serverSocket.getInetAddress().getHostName() + ':' + serverSocket.getLocalPort()); while (true) {Socket socket = serverSocket.accept();new ClientThread(socket); }} catch (IOException e) { System.out.println('IO Exception:' + e); System.exit(1);} catch (NumberFormatException e) { System.out.println('Number Format Exception:' + e); System.exit(1);} } public static HashMap<String, ClientThread> getClientInfo() {return clientInfo; } // *********************************** Main Method ******************** public static void main(String args[]) {new LiveChatServer(); }}

多個客戶端通過服務器互相交談

package com.chat;/************************ Live Chat Client *******************/import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.InetAddress;import java.net.socket;import java.net.socketException;public class LiveChatClient { private String chatName;// current user’s chat name(max 7 char if greater than show as 6 // char+... private String serverAddress; // TCP Components private Socket socket; private BufferedReader in; private PrintWriter out; public LiveChatClient() {initHostName();runclient();// have fun } public void initHostName() {try { //replace host name with your computer name or IP address serverAddress = '[hostname]'; if (serverAddress == null)System.exit(1); serverAddress = serverAddress.trim(); if (serverAddress.length() == 0)// empty field {System.out.println('Server IP Address or Name can’t be blank.');initHostName();return; } System.out.println('Trying to connect with server...nServer IP Address:' + serverAddress); // create socket InetAddress inetAddress = InetAddress.getByName(serverAddress); if (!inetAddress.isReachable(60000))// 60 sec {System.out.println('Error! Unable to connect with server.nServer IP Address may be wrong.');System.exit(1); } initPortNo();} catch (SocketException e) { System.out.println('Socket Exception:n' + e); initHostName(); return;} catch (IOException e) { initHostName(); return;} } public void initPortNo() {try { String portNo = '1234'; portNo = portNo.trim(); if (portNo.length() == 0)// empty field {System.out.println('Server port No can’t be blank.');initPortNo();return; } System.out.println('Trying to connect with server...nServer Port No:' + portNo); socket = new Socket(serverAddress, 1234); in = new BufferedReader(new InputStreamReader(socket.getInputStream())); out = new PrintWriter(socket.getoutputStream(), true);} catch (IOException e) { System.out.println('IO Exception:n' + e); initPortNo(); return;} } public void sendChatName() throws IOException {System.out.println('Enter your name:');BufferedReader br = new BufferedReader(new InputStreamReader(system.in));String name = br.readLine();if (name == null) System.exit(1);// title case (get only first 9 chars of chat name)name = name.trim();if (name.equalsIgnoreCase('All')) { System.out.println('This name is already reserved. Try different one.'); sendChatName(); return;}if (name.length() == 0) { System.out.println('Please enter your chat name.'); sendChatName(); return;}if (name.length() == 1) chatName = String.valueOf(name.charat(0)).toupperCase();if (name.length() > 1 && name.length() < 10) chatName = String.valueOf(name.charat(0)).toupperCase() + name.substring(1).toLowerCase();else if (name.length() > 9) chatName = String.valueOf(name.charat(0)).toupperCase() + name.substring(1, 10).toLowerCase();// sending opcode first then sending chatName to the serverout.println(Opcode.CLIENT_CONNECTEING);out.println(chatName); } public void runclient() {try { sendChatName(); while (true) {int opcode = Integer.parseInt(in.readLine());switch (opcode) { case Opcode.CLIENT_CONNECTEING:// this client is connectingboolean result = Boolean.valueOf(in.readLine());if (result) { System.out .println(chatName + ' is already present. Try different one.'); runclient();}break; case Opcode.CLIENT_CONNECTED:// a new client is connectedInteger totalClient = Integer.valueOf(in.readLine());System.out.println('Total Client:' + totalClient);for (int i = 0; i < totalClient; i++) { String client = in.readLine(); System.out.println((i + 1) + ':' + client);}break;} }} catch (IOException e) { System.out.println('Client is closed...');} } // *********************************** Main Method ******************** public static void main(String args[]) {new LiveChatClient(); }}

服務器為每個客戶端啟動一個多線程,并包含有關所有已連接客戶端的信息

package com.chat;/************************ Client Thread *******************/import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.socket;import java.util.HashMap;public class ClientThread implements Runnable { // TCP Components private Socket socket; private BufferedReader in; private PrintWriter out; private String chatName; // seperate thread private Thread thread; // boolean variable to check that client is running or not private volatile boolean isRunning = true; // opcode private int opcode; private HashMap<String, ClientThread> clientInfo = new HashMap<String, ClientThread>(); public ClientThread(Socket socket) {try { this.socket = socket; this.clientInfo = LiveChatServer.getClientInfo(); in = new BufferedReader(new InputStreamReader(socket.getInputStream())); out = new PrintWriter(socket.getoutputStream(), true); thread = new Thread(this); thread.start();} catch (IOException e) { System.out.println(e);} } public void run() {try { while (isRunning) {if (!in.ready()) continue;opcode = Integer.parseInt(in.readLine());// getting opcode first from clientswitch (opcode) { case Opcode.CLIENT_CONNECTEING:chatName = in.readLine();boolean result = clientInfo.containsKey(chatName);out.println(Opcode.CLIENT_CONNECTEING);out.println(result);if (result)// wait for another chat name if already present continue;// send list of already online users to new online user// for (Object user : clientInfo.keySet().toArray()) {// out.println(Opcode.CLIENT_CONNECTED);// out.println(user.toString());// }// put new entry in clientInfo hashmapclientInfo.put(chatName, this);int i = 0;for (String key : clientInfo.keySet()) { if (key.equals(chatName)) {System.out.println(chatName + ' added at ' + (i + 1) + ' position'); } i++;}// tell other users about new added user and update their online users listfor (ClientThread client : clientInfo.values()) { client.out.println(Opcode.CLIENT_CONNECTED); client.out.println(clientInfo.size()); for (ClientThread client1 : clientInfo.values()) {client.out.println(client1.chatName); }}break;} } // clsoe all connections out.close(); in.close(); socket.close();} catch (IOException e) { System.out.println(e);} }}

這是添加兩個客戶端時的輸出。

服務器:

ServerSocket[addr=computerName/IPAddress,port=0,localport=1234]computerName:1234Abc added at 1 positionXyz added at 2 position

客戶1:

Trying to connect with server...Server IP Address:computerNameTrying to connect with server...Server Port No:1234Enter your name:abcTotal Client:11:AbcTotal Client:21:Abc2:Xyz

客戶2:

Trying to connect with server...Server IP Address:computerNameTrying to connect with server...Server Port No:1234Enter your name:xyzTotal Client:21:Abc2:Xyz解決方法

我正在為任務做游戲。我有一個用Java設置的服務器和多客戶端,我們正在使用MVC。我需要有一個客戶端將其名稱發送到服務器,然后當有兩個玩家出現時,我需要將這兩個名稱以及他們的玩家編號(玩家1或玩家2)發送回客戶端。我不知道如何分辨信息來自哪個線程或信息被發送到哪個線程,因此并非所有玩家都認為自己是玩家之一。謝謝。

標簽: java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩国产精品久久久| 视频在线观看91| 日本成人中文字幕| 老牛国产精品一区的观看方式| 国产精品99一区二区| 久久影视一区| 欧美va天堂在线| 欧美日韩国产综合网| 日韩一级网站| 视频一区欧美精品| 四虎在线精品| 欧美亚洲专区| 国产日韩高清一区二区三区在线| 国产精选一区| 国产三级精品三级在线观看国产| 国产精品一区二区中文字幕| 国产日韩欧美| 国产一区二区三区成人欧美日韩在线观看 | 好吊日精品视频| 91久久黄色| 亚洲精品无播放器在线播放| 日韩精品导航| 九九99久久精品在免费线bt| 91日韩在线| 激情久久久久久| 亚洲色图网站| 欧美黄页在线免费观看| 国产一区不卡| 欧美日韩一区二区三区视频播放| 国产午夜精品一区二区三区欧美 | 亚洲一二av| 国产日韩欧美三级| 韩国精品主播一区二区在线观看| 在线国产一区| 日韩av一区二区三区| 欧美国产另类| 伊人久久大香线蕉av不卡| 成人在线视频区| 日韩av不卡在线观看| 日韩av午夜在线观看| 日韩精品视频网站| 精品国产亚洲一区二区三区在线 | 欧美va亚洲va日韩∨a综合色| 久久99伊人| 精品国产99| 亚洲精品在线二区| 欧美黄色一区| 精品久久久久久久| 久久精品亚洲| 日韩不卡在线观看日韩不卡视频| 欧美日一区二区| 少妇精品导航| 日本免费一区二区三区四区| 久久婷婷丁香| 中文字幕在线视频网站| 国产精品久久久久久久免费观看| 国产精品久久久免费| 国产精区一区二区| 免费一二一二在线视频| 午夜国产欧美理论在线播放| 亚洲日韩中文字幕一区| 视频一区二区不卡| 国产日韩欧美一区二区三区在线观看| 国产精品videossex久久发布 | 亚洲小说欧美另类婷婷| 免费一区二区视频| 成人在线免费观看网站| 怡红院精品视频在线观看极品| 欧美性www| 亚洲深夜视频| 欧美午夜三级| 香蕉精品999视频一区二区| 黄色网一区二区| 亚洲久久视频| 蜜桃成人av| 精品国产鲁一鲁****| 免费在线成人网| 人人草在线视频| 国产日韩欧美高清免费| 麻豆成人在线| 久久久久91| 久久中文在线| 日韩超碰人人爽人人做人人添| 影音先锋久久| 日韩欧美午夜| 国产精品视频一区视频二区| 妖精视频成人观看www| sm捆绑调教国产免费网站在线观看| 日韩精品高清不卡| 亚洲永久字幕| 视频一区中文| 日韩欧美一区二区三区在线观看| 久久a爱视频| 欧美三级第一页| 亚洲欧洲av| 香蕉成人久久| 伊人精品视频| 亚洲女同一区| 久久免费国产| 91综合网人人| 美日韩一区二区三区| 日本精品国产| 日日夜夜免费精品| 视频一区二区欧美| 国产精品美女久久久| 99热国内精品| 色婷婷精品视频| 日韩一区亚洲二区| 精品三区视频| 久久精品免视看国产成人| 国产日韩一区二区三区在线播放| 中文不卡在线| 亚洲一区二区三区高清| 九九在线精品| 国产一区日韩一区| 亚洲a一区二区三区| 日韩欧美精品一区| 肉色欧美久久久久久久免费看 | 欧美日韩精品一区二区三区视频| 人人爽香蕉精品| 亚洲精品va| 婷婷综合社区| 夜夜嗨网站十八久久 | 女人天堂亚洲aⅴ在线观看| 亚洲精品一级二级| 国产高清不卡| 欧美三级精品| 欧美好骚综合网| 国产日韩电影| 亚洲调教视频在线观看| 视频福利一区| 亚洲激情社区| 亚洲一区二区日韩| 亚洲深夜福利在线观看| 亚洲精品九九| 国产精品色婷婷在线观看| 国产精品一区二区免费福利视频| 国产精品任我爽爆在线播放| 免费日韩一区二区三区| 成人国产精品一区二区网站| 国产理论在线| 国产精品亚洲一区二区三区在线观看| 成人小电影网站| 欧美亚洲国产精品久久| 国产视频一区在线观看一区免费| 美国三级日本三级久久99| 日本亚洲三级在线| 国产精品网站在线看| 国产伦久视频在线观看| 欧美不卡高清| 亚洲精品在线二区| 久久av免费看| 免费高潮视频95在线观看网站| 涩涩av在线| 亚洲欧美日韩高清在线| 亚洲精品国产精品粉嫩| 国产探花一区二区| 国产日韩视频在线| 色一区二区三区| 免费日韩av| 久久av网址| 亚洲午夜黄色| 97成人超碰| av最新在线| 在线 亚洲欧美在线综合一区| 亚洲欧洲专区| 98精品久久久久久久| 好看的亚洲午夜视频在线| 亚洲欧洲国产精品一区| 精品视频黄色| 亚洲欧美高清| 国产乱码精品一区二区三区亚洲人| 精品视频高潮| 99xxxx成人网| 国产视频网站一区二区三区| 色天使综合视频| 亚洲精品伊人| 亚洲三级欧美| 亚洲理论在线| 91一区二区三区四区| 亚洲一区中文| 精品中文字幕一区二区三区| 免费不卡中文字幕在线| 日本特黄久久久高潮| 日韩啪啪电影网| 日韩一区二区三区高清在线观看| 国产91欧美| 亚洲欧美日本国产专区一区| 欧美a一区二区| 欧美专区在线| 福利一区和二区| 亚洲人成精品久久久| 成人av三级| 日韩一区二区三区在线看| 天堂а√在线最新版中文在线| 一区二区三区网站| 91av亚洲| 欧美欧美黄在线二区| 欧美影院三区| 国产精品男女|