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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java搭建聊天服务器_使用 ServerSocket 建立聊天服务器-2

發布時間:2025/3/12 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java搭建聊天服务器_使用 ServerSocket 建立聊天服务器-2 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.

從serverListener中可以看出,每一個客戶端創建新的請求之后,都會把它分配給一個獨立的chatsocket ,但是每一個ChatSocket都是相互獨立的,他們之間并不能溝通,所以要新建一個類,將這些新建的線程管理起來,然后實現他們之間的相互通信.(類似于微信加群聊天的功能)

由于一個聊天服務器只有一個管理者,所以創建chatManager.java管理類,需要對類做單例化的處理

===================================================================

1.項目截圖

2.ChatManager.java

package com.nantian.socket;

import java.util.Vector;

public class ChatManager {

/**

* 由于一個聊天服務器只有一個管理者,所以創建chatManager.java管理類,需要對類做單例化的處理

*/

//單例化第一步,需要構造private的構造方法

private ChatManager() {}

//為當前類創建實例

private static final ChatManager cm=new ChatManager();

public static ChatManager getChatManager() {

return cm;

}

//===========以上代碼完成了單例化的操作

Vector vector=new Vector();

//為當前類添加一個新的chatSocket

public void add(ChatSocket cs) {

vector.add(cs);

}

//還需實現一個方法,實現其中一個線程調用下面的方法向其他客戶端發送信息

//ChatSocket cs(當前線程),String out(發送的信息)

public void publish(ChatSocket cs,String out) {

//發送給所有線程,需要對集合中的線程進行遍歷

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

//獲取循環中的第i個對象

ChatSocket csChatSocket=vector.get(i);

//當前發送的線程沒必要接收這條信息

//如果等于當前發送對象的話,就不執行發送消息

if (!cs.equals(csChatSocket)) {

//調用out()方法將字符串out傳輸出去

csChatSocket.Out(out);

}

}

}

}

===================================================================

2.ChatSocket.java

package com.nantian.socket;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.UnsupportedEncodingException;

import java.net.Socket;

public class ChatSocket extends Thread{

//本地需要有一個socket對象,來接入傳入的值

Socket socket;

/**

* 創建構造方法

*/

public ChatSocket(Socket s) {

this.socket=s;

}

/**

* 運行MyServerSocket類后,沒有值輸出后所寫的方法

* @param out

*/

public void Out(String out) {

try {

socket.getOutputStream().write(out.getBytes("UTF-8"));

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

/**

* 復寫run方法,執行后臺的功能

*/

@Override

public void run() {

//將socket的輸入流進行包裝

try {

BufferedReader br=

new BufferedReader(

new InputStreamReader(

socket.getInputStream(),"UTF-8"));

//創建本地對象

String line=null;

while ((line=br.readLine())!=null) {

//聊天室中的所有信息發送給所有人,需要調用publish()方法

//將自己傳入使用this

ChatManager.getChatManager().publish(this, line);

}

//while循環結束,需要將當前的流關閉

br.close();

} catch (UnsupportedEncodingException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

===================================================================

3.MyServerSocket.java

package com.nantian.socket;

//ctrl+shift+o刪除多余的jar包

public class MyServerSocket {

public static void main(String[] args) {

new ServerListener().start();

}

}

===================================================================

4.ServerListener.java

package com.nantian.socket;

import java.io.IOException;

import java.net.ServerSocket;

import java.net.Socket;

import javax.swing.JOptionPane;

public class ServerListener extends Thread{

@Override

public void run() {

try {

//port取值范圍:1-65535(通常取值較大,這樣可以和系統的分開)

ServerSocket serverSocket=new ServerSocket(12345);

//循環監聽來自客戶端的連接

while(true) {

//監聽客戶端的連接

//accept()為一個阻塞的方法,會阻塞當前的線程

//ServerSocket的accept()方法是偵聽并接受到此套接字的連接,

//就是一直等待連接,此方法在連接傳入之前一直阻塞。直到接受到有socket的連接。

//故創建ServerLIstener extends Thread

Socket socket=serverSocket.accept();

//建立連接

JOptionPane.showMessageDialog(null, "有客戶端連接到了本機的12345端口");

//因為每一個Socket要與客戶端獨立的通信,所以socket需要另起一個線程

//將socket傳遞給新的線程,用于socket通信,故創建ChatSocket extends Thread

ChatSocket cs=new ChatSocket(socket);

cs.start();

//將cs添加到聊天管理器中

ChatManager.getChatManager().add(cs);

}

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

===================================================================

5.run as -->java application

cmd,輸入telnet localhost 12345,截圖如下

總結

以上是生活随笔為你收集整理的java搭建聊天服务器_使用 ServerSocket 建立聊天服务器-2的全部內容,希望文章能夠幫你解決所遇到的問題。

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