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

歡迎訪問 生活随笔!

生活随笔

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

java

java 聊天室 私聊_Java聊天室——实现多人聊天、私聊、群聊

發布時間:2023/12/16 java 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 聊天室 私聊_Java聊天室——实现多人聊天、私聊、群聊 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

客戶端package project.java;

//客戶端

//輸入、輸出流分別為處于一個線程

import java.io.IOException;

import java.io.PrintStream;

import java.net.Socket;

import java.util.Scanner;

class OutToServer2 implements Runnable{

private Socket client;

public OutToServer2(Socket client) {

super();

this.client = client;

}

@Override

public void run() {

PrintStream printStream;

try {

printStream = new PrintStream(client.getOutputStream(),true);

Scanner scanner = new Scanner(System.in);

scanner.useDelimiter("\n");

while(true) {

System.out.println("請輸入:");

while(scanner.hasNext()) {

String string = scanner.nextLine();

printStream.println(string);

if(string.equals("拜拜")) {

System.out.println("客戶端退出");

printStream.close();

scanner.close();

//client.close();

break;

}

}

}

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

class ReadFromServer2 implements Runnable{

private Socket client;

public ReadFromServer2(Socket client) {

super();

this.client = client;

}

public void run() {

try {

Scanner scanner = new Scanner(client.getInputStream());

scanner.useDelimiter("\n");

while(scanner.hasNext()) {

System.out.println("服務器端輸入:"+scanner.nextLine());

}

} catch (IOException e) {

e.printStackTrace();

}

}

}

public class SingelClient2 {

public static void main(String[] args) {

String serverName = "127.0.0.1";

int port = 6666;

Socket client;

try {

client = new Socket(serverName,port);

Thread ouThread = new Thread(new OutToServer2(client));

Thread inThread = new Thread(new ReadFromServer2(client));

ouThread.start();

inThread.start();

} catch (Exception e) {

e.printStackTrace();

}

}

}

服務器端package project.java;

import java.io.IOException;

import java.io.PrintStream;

import java.net.ServerSocket;

import java.net.Socket;

import java.util.HashMap;

import java.util.Iterator;

import java.util.Map;

import java.util.Map.Entry;

import java.util.Scanner;

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

//服務器端

/**

* Map

* 用戶注冊:username:yyy

* 群聊:G:hello

* 私聊:P:yyy-hhh

*/

class ExcuteClientServer1 implements Runnable{

private Socket client;

private Map clientMap;

public ExcuteClientServer1(Socket client, Map clientMap) {

super();

this.client = client;

this.clientMap = clientMap;

}

public void run() {

try {

//拿到客戶端輸入流,讀取用戶信息

Scanner scanner = new Scanner(client.getInputStream());

String string = null;

while(true){

if(scanner.hasNext()) {

string = scanner.nextLine();

Pattern pattern = Pattern.compile("\r\n|\r|\n");

Matcher matcher = pattern.matcher(string);

string = matcher.replaceAll("");

//用戶注冊

if(string.startsWith("user")) {

//獲取用戶名

String useName = string.split("\\:")[1];

userRegist(useName, client);

continue;

}

//群聊

else if(string.startsWith("G")) {

String message = string.split("\\:")[1];

gropChat(message);

continue;

}

//私聊

else if(string.startsWith("P")) {

String temp = string.split("\\:")[1];

//取得用戶名

String useName = temp.split("\\-")[0];

//取得消息內容

String message = temp.split("\\-")[1];

privateChat(useName, message);

continue;

}

//用戶退出

else if(string.contains("拜拜")) {

//先根據Socket知道用戶名

String useName = getUseName(client);

System.out.println("用戶名為"+useName +"的用戶下線了!!!");

clientMap.remove(useName);

continue;

}

}

}

}catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

//獲取key值(即由端口號找到用戶名)

public String getUseName(Socket socket) {

String useName = null;

for(String getKey : clientMap.keySet()) {

if(clientMap.get(getKey).equals(socket)) {

useName = getKey;

}

}

return useName;

}

//注冊實現

public void userRegist(String useName,Socket client) {

System.out.println("用戶姓名為:" + useName);

System.out.println("用戶socket為:" + client);

System.out.println("用戶名為"+ useName +"的用戶上線了!");

System.out.println("當前用戶數為:"+ (clientMap.size()+1) +"人");

clientMap.put(useName, client);

}

//群聊實現

public void gropChat(String message) {

Iterator> iterable = clientMap.entrySet().iterator();

for(Map.Entry stringSocketEntry:clientMap.entrySet()) {

try {

Socket socket = stringSocketEntry.getValue();

PrintStream printStream = new PrintStream(socket.getOutputStream(),true);

System.out.println("用戶說"+message);

printStream.println(message);

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

//私聊實現

public void privateChat(String useName,String message) {

//根據對應的useName找到對應的Socket

Socket privateSocket = clientMap.get(useName);

try {

PrintStream printStream = new PrintStream(privateSocket.getOutputStream());

printStream.println("用戶名為"+getUseName(client)+"的用戶對你說:"+message);

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

public class SingleServer2 {

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

ServerSocket serverSocket = new ServerSocket(6666);

//存取用戶信息(用戶名和Socket)

Map map = new HashMap();

//線程池,線程大小為20

ExecutorService executorService =Executors.newFixedThreadPool(20);

System.out.println("等待客戶連接中...");

try {

for(int i = 0;i < 20;i ++) {

Socket socket = serverSocket.accept();

System.out.println("有新的用戶連接:"+socket.getInetAddress()+socket.getPort());

executorService.execute(new ExcuteClientServer1(socket,map));

}

executorService.shutdown();

serverSocket.close();

} catch (Exception e) {

}

}

}

總結

以上是生活随笔為你收集整理的java 聊天室 私聊_Java聊天室——实现多人聊天、私聊、群聊的全部內容,希望文章能夠幫你解決所遇到的問題。

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