溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

在線聊天室的Java實現(xiàn)(功能比較弱)

發(fā)布時間:2020-08-11 06:47:44 來源:ITPUB博客 閱讀:376 作者:loveyanzhi 欄目:編程語言
自己用Java寫的一個在線聊天室...功能不是很完善...供參考[@more@]

ChatServer.java這里是主調(diào)用部分

package com.darkblue;

/**

*

* @author DarkBlue

*

* 本程序用于實現(xiàn)聊天室的服務(wù)器

*/

import java.net.*;

import java.io.*;

public class ChatServer implements Runnable{

private ServerSocket server;// 服務(wù)器socket

private static int port = 8888;// 監(jiān)聽端口號

private static boolean isShutDown = false;//沒有停止

private ChatServer() {

try {

server = new ServerSocket(port);// 創(chuàng)建一個服務(wù)器socket

} catch (IOException e) {

e.printStackTrace();

}

}

public static void startService() {

ChatServer cs = new ChatServer();

Thread th = new Thread(cs);

th.start();

}

public void run(){

try {

//循環(huán)等待客戶端連接

while(!isShutDown){

Socket socket = server.accept();

//使用socket進行通信

new SocketManager(socket).start();//開始一個線程

}

} catch (IOException e) {

e.printStackTrace();

}

}

public static void stopService() {

isShutDown = true;

}

public static void main(String[] args){

ChatServer.startService();

}

}

SocketManager.java 用于管理socket

package com.darkblue;

import java.net.*;

import java.io.*;

import java.util.*;

public class SocketManager extends Thread {

private static List socketList = new ArrayList();// 存放socket

private static Queue messages = new LinkedList();// 消息隊列

private Socket socket = null;// 對象變量

public SocketManager() {

super();

}

public SocketManager(Socket socket) {

this.socket = socket;

addSocket(socket);

}

public static void addSocket(Socket socket) {// 增加一個socket

socketList.add(socket);

}

public static void addMessage(String message) {

messages.add(message);

}

public static void sendAllMessage() {

if (messages != null) {

while (!messages.isEmpty()) {

Object msg = messages.remove();

if (msg instanceof String) {

String message = (String) msg;

if (socketList != null) {// 循環(huán)發(fā)送

for (int i = 0; i < socketList.size(); i++) {

Socket socket = (Socket) socketList.get(i);

try {

OutputStreamWriter osw = new OutputStreamWriter(

socket.getOutputStream());

BufferedWriter bw = new BufferedWriter(osw);

bw.write(message + "nr");

bw.flush();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

}

}

}

public void run() {// 針對每個socket進行

if (socket != null) {// socket不為null

try {

BufferedReader br = new BufferedReader(new InputStreamReader(

socket.getInputStream()));//輸入流

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));

bw.write("歡迎使用本聊天系統(tǒng)nr");

bw.write("輸入消息后按回車發(fā)送消息nr");

bw.write("消息:");

bw.flush();

String temp = br.readLine();//讀取消息

while(temp!=null){

addMessage(temp);

sendAllMessage();

bw.write("消息:");

bw.flush();

temp=br.readLine();

}

br.close();

bw.close();

socket.close();

socketList.remove(socket);//移除

System.out.println("關(guān)閉了一個");

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI