您好,登錄后才能下訂單哦!
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();
}
}
}
}
免責(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)容。