日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java的serversocket_Java ServerSocket 实现聊天室功能(简易版)

發布時間:2024/9/27 java 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java的serversocket_Java ServerSocket 实现聊天室功能(简易版) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

大體實現功能可以選擇房間,可以與房間中的用戶進行實時的交流

說在前面的話:

serverSocket.accept() 會形成阻塞

scanner.hasNextLine() 和 scanner.nextLine() 也會形成阻塞

windows 下需要打開telnet服務。請自行百度

實現思路:

用戶連接上服務器后選擇房間號,進入房間。進入房間后會向房間中所有的用戶打印出用戶進入房間的提醒。

用戶進入房間后,輸入姓名即可發言。

說起來很簡單,代碼實現更簡單。我們需要一個保存房間用戶的容器。我這里使用的是。

// 保存聊天室中的用戶數據

private static Map>> charScnnerMap = new HashMap<>();

使用 try-with-resource 語法防止出現資源未關閉的情況出現。

直接上代碼

package com.annie;

import com.sun.org.apache.xml.internal.resolver.readers.ExtendedXMLCatalogReader;

import java.io.*;

import java.net.ServerSocket;

import java.net.Socket;

import java.util.*;

public class App {

// 保存聊天室中的用戶數據

private static Map>> charScnnerMap = new HashMap<>();

public static void print(List> charNames, String conn) {

for (Map charName : charNames) {

Set> entries = charName.entrySet();

for (Map.Entry entry : entries) {

entry.getValue().println(conn);

}

}

}

public static void main(String[] args) throws InterruptedException {

charScnnerMap.put("1", new ArrayList>());

charScnnerMap.put("2", new ArrayList>());

charScnnerMap.put("3", new ArrayList>());

// 監控本機端口 9189

try (ServerSocket serverSocket = new ServerSocket(9189)) {

while (true) {

Socket accept = serverSocket.accept();

new Thread(() -> {

try (InputStream inputStream = accept.getInputStream();

OutputStream outputStream = accept.getOutputStream();

Scanner scanner = new Scanner(inputStream, "UTF-8");

PrintWriter out = new PrintWriter(new OutputStreamWriter(outputStream, "UTF-8"), true)) {

// 定位房間

String number = "-1";

out.println("Please enter the room number.(1-3): ");

number = scanner.nextLine();

if (!number.equals("1") && !number.equals("2") && !number.equals("3")) {

while (true) {

out.println("Please enter the correct room.(1-3): ");

number = scanner.nextLine();

if (number.equals("1") || number.equals("2") || number.equals("3")) {

break;

}

}

}

// 顯示姓名

out.println("Please enter your name: ");

String name = scanner.nextLine();

List> charNames = charScnnerMap.get(number);

Map m = new HashMap<>();

m.put(name, out);

charNames.add(m);

// 打印內容

print(charNames, "Welcome [" + name + "] to the room.");

boolean b = true;

while (b && scanner.hasNextLine()) {

String s = scanner.nextLine();

print(charNames, name + ": " + s);

if (s.equals("BB")) {

print(charNames, "[" + name + "]Exit the room");

b = false;

}

}

} catch (Exception e) {

e.printStackTrace();

}

}).start();

}

} catch (IOException e) {

e.printStackTrace();

}

}

}

結尾:如果您覺得這邊文章對您有幫助,麻煩

。您的支持是對筆者的最大幫助😘😘😘

總結

以上是生活随笔為你收集整理的java的serversocket_Java ServerSocket 实现聊天室功能(简易版)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。