首先,實作一個最簡單的網絡聊天室,必備兩個裝置——伺服器和多個用戶端。伺服器可以是我們自己的電腦, 而用戶端我們可以用cmd來模拟。
于是我們分四步來實作:
一: 建立伺服器
java.net.ServerSocket server = new java.net.ServerSocket(10101);//10101未連接配接端口号
(參考類的介紹————)
二:接收連接配接到了伺服器的用戶端
Socket socket = server.accept();//發現一個用戶端
三: 接下來的操作就是對輸出和輸入流的操作了————因為一個用戶端就可以看做是一個流的對象,我們可以接收用戶端裡的輸入,也可以從伺服器想用戶端輸出消息。
詳細内容見代碼:——
package 聊天室01;
import java.net.Socket;
import java.util.Map;
public class Severs {
//使用一個靜态的map來儲存用戶端号和用戶端
public static Map<Integer, Socket> map = new java.util.HashMap<Integer, Socket>();
public static void main(String[] args) {
try {
//建立伺服器對象
java.net.ServerSocket server = new java.net.ServerSocket(10101);
System.out.println("伺服器已開啟");
int num = 1;//定義變量來記錄用戶端的個數
while(true){//死循環的接受用戶端連接配接
Socket socket = server.accept();//發現一個用戶端
map.put(num, socket);//儲存
Client_thread client = new Client_thread(socket , num);//立即開一個線程來處理
client.start();//開始線程
num++;//下一個用戶端的編号加一
}
}catch(Exception ex){
ex.printStackTrace();
}
}
}
為了接收多個用戶端同時,我果斷開啟了多線程來實作用戶端的
package 聊天室01;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class Client_thread extends Thread{
private Socket socket;//一個用戶端
private int num;//記錄目前的用戶端編号
Client_thread(Socket socket , int num){
this.socket = socket;
this.num = num;
}
public void run() {
try {//向伺服器直接輸出消息
System.out.println("客戶端 "+num+" : "+socket.getLocalSocketAddress().toString()+"已連接配接");
OutputStream output = socket.getOutputStream();//獲得向目前用戶端輸出的流
output.write(("歡迎 歡迎 \r\n").getBytes());//先把字元串轉換為字元數組 然後以位元組流輸出到用戶端
output.flush();//強制輸出結束
// output.close();
//獲得目前用戶端的輸入流
InputStream input = socket.getInputStream();
while(true){//不斷地接收用戶端的輸入
char ch = (char)input.read();//按位元組接受輸入
String str = "" + ch;
while(ch!='\n'){
ch = (char)input.read();
str+=ch;
}
System.out.print("用戶端 "+num+" 說: "+str);//輸入到伺服器
for(int i=0 ; i<Severs.map.size() ; i++){//想其他的線上伺服器發送消息
if(num != (i+1)){//除了自己
OutputStream output_temp = Severs.map.get(i+1).getOutputStream();//獲得用戶端輸出的流
output_temp.write(str.getBytes());//先把字元串轉換為字元數組 然後以位元組流輸出到用戶端
output_temp.flush();
}
}
}
}catch(Exception ex){
ex.printStackTrace();
}
}
}
四:運作代碼 ,開啟伺服器。
打開cmd ,連接配接伺服器 telnet 127.0.0.1 10101 中間的是本機IP 最後一個是我們本機伺服器的端口
(注意:需要先打開telnet系統服務,預設是不打開的(控制台—程式與功能—打開或關閉windows
功能然後選中telnet用戶端))