利用网络Socket和多线程实现一个双向聊天
生活随笔
收集整理的這篇文章主要介紹了
利用网络Socket和多线程实现一个双向聊天
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
接收鍵盤輸入然后向?qū)Ψ桨l(fā)送消息的線程
1 package cn.com.chat; 2 3 import java.io.BufferedReader; 4 import java.io.BufferedWriter; 5 import java.io.IOException; 6 import java.io.InputStreamReader; 7 import java.io.OutputStreamWriter; 8 import java.net.Socket; 9 10 /** 11 * 12 * @author Xiaofei 13 * 14 */ 15 public class SendMsgThread extends Thread{ 16 /** 17 * 用來(lái)接收鍵盤輸入然后向?qū)Ψ桨l(fā)送消息的線程 18 */ 19 Socket ss = null; 20 BufferedWriter bw = null; 21 BufferedReader br = null; 22 public SendMsgThread(Socket ss){ 23 this.ss = ss; 24 try { 25 bw = new BufferedWriter(new OutputStreamWriter(ss.getOutputStream())); 26 br = new BufferedReader(new InputStreamReader(System.in)); 27 } catch (IOException e) { 28 // TODO 自動(dòng)生成的 catch 塊 29 e.printStackTrace(); 30 } 31 } 32 public void run(){ 33 try { 34 while(true){ 35 String str; 36 str = br.readLine(); 37 if(str.equals("exit")){ 38 System.exit(0); 39 }else{ 40 bw.write(str+"\n"); 41 bw.flush(); 42 } 43 } 44 } catch (IOException e) { 45 // TODO 自動(dòng)生成的 catch 塊 46 e.printStackTrace(); 47 }finally{ 48 try { 49 bw.close(); 50 br.close(); 51 } catch (IOException e) { 52 // TODO 自動(dòng)生成的 catch 塊 53 e.printStackTrace(); 54 } 55 } 56 } 57 }服務(wù)端:Server
package cn.com.chat;import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket;public class Server {public static void main(String[] args) {ServerSocket server = null;Socket socket = null;BufferedReader br= null;try {server = new ServerSocket(88);socket = server.accept();new SendMsgThread(socket).start();br = new BufferedReader(new InputStreamReader(socket.getInputStream()));while(true){String str = br.readLine();System.out.println("客戶端:\n"+str);}} catch (IOException e) {// TODO 自動(dòng)生成的 catch 塊 e.printStackTrace();}finally{try {br.close();server.close();} catch (IOException e) {// TODO 自動(dòng)生成的 catch 塊 e.printStackTrace();}}}}客戶端:Client
1 package cn.com.chat; 2 3 import java.io.BufferedReader; 4 import java.io.IOException; 5 import java.io.InputStreamReader; 6 import java.net.Socket; 7 8 public class Client { 9 public static void main(String[] args) { 10 Socket socket = null; 11 BufferedReader br = null; 12 try { 13 socket = new Socket("192.168.16.111", 88); 14 System.out.println("請(qǐng)輸入您的消息:"); 15 new SendMsgThread(socket).start(); 16 br = new BufferedReader(new InputStreamReader( 17 socket.getInputStream())); 18 while (true) { 19 String str = br.readLine(); 20 System.out.println("客戶端:\n" + str); 21 } 22 } catch (IOException e) { 23 e.printStackTrace(); 24 } finally { 25 try { 26 br.close(); 27 socket.close(); 28 } catch (IOException e) { 29 // TODO 自動(dòng)生成的 catch 塊 30 e.printStackTrace(); 31 } 32 } 33 } 34 35 }特別提醒一點(diǎn):注意啟動(dòng)的順序,現(xiàn)實(shí)啟動(dòng)服務(wù)端,再啟動(dòng)客戶端。現(xiàn)有接收的服務(wù)器,客戶端才能夠獲得服務(wù)端的端口和IP。
?
轉(zhuǎn)載于:https://www.cnblogs.com/rememberme/p/ChatLine.html
總結(jié)
以上是生活随笔為你收集整理的利用网络Socket和多线程实现一个双向聊天的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 王之泰《面向对象程序设计(java)》课
- 下一篇: 物流配送中商品订货数量的控制技术