您好,登錄后才能下訂單哦!
上節(jié)回顧:在學(xué)習(xí)了Socket建立客戶端和服務(wù)器雙向交流后,我們發(fā)現(xiàn)它的問答形式不夠靈活。
本節(jié)課我們講解如何在服務(wù)器和客戶端之間實(shí)現(xiàn)聊天室~
需要思考的問題:
服務(wù)器端:一個(gè)線程專門發(fā)送消息,一個(gè)線程專門接收消息。
客戶端:一個(gè)線程專門發(fā)送消息,一個(gè)線程專門接收消息。
除了消化這段代碼外,還需要思考,怎么實(shí)現(xiàn)一個(gè)聊天室?。y度較大!?。?/span>
【示例1】聊天室服務(wù)器端
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.ServerSocket; import java.net.Socket;
public class ChatServer {
public static void main(String[] args) { ServerSocket server=null; Socket socket=null; BufferedReader in=null; try { server = new ServerSocket(8888); socket=server.accept(); new ServerThread(socket).start();
//main線程負(fù)責(zé)讀取客戶端發(fā)來的信息 in=new BufferedReader(new InputStreamReader(socket.getInputStream())); while(true){ String str=in.readLine(); System.out.println("客戶端說:"+str); } } catch (IOException e) { e.printStackTrace(); }finally{ try { in.close(); } catch (IOException e) { e.printStackTrace(); } try { socket.close(); } catch (IOException e) { e.printStackTrace(); }
}
} }
/** * 專門向客戶端發(fā)送消息的線程 * @author Administrator * */ class ServerThread extends Thread { Socket ss; BufferedWriter out; BufferedReader br; public ServerThread(Socket ss){ this.ss = ss; try { out=new BufferedWriter(new OutputStreamWriter(ss.getOutputStream())); br = new BufferedReader(new InputStreamReader(System.in)); } catch (IOException e) { e.printStackTrace(); } } public void run(){ try { while(true){ String str2 = br.readLine(); out.write(str2+"\n"); out.flush(); } } catch (IOException e) { e.printStackTrace(); }finally{ try { out.close(); } catch (IOException e) { e.printStackTrace(); } try { br.close(); } catch (IOException e) { e.printStackTrace(); } }
} }
|
【示例2】聊天室客戶端
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.InetAddress; import java.net.Socket; import java.net.UnknownHostException;
public class ChatClient { public static void main(String[] args) { Socket socket = null; BufferedReader in = null; try { socket=new Socket(InetAddress.getByName("192.168.1.32"),8888); new ClientThread(socket).start(); in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
//main線程負(fù)責(zé)接收服務(wù)器發(fā)來的信息 while(true){ System.out.println("服務(wù)器說:"+in.readLine()); }
} catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally{ try { socket.close(); } catch (IOException e) { e.printStackTrace(); }
try { in.close(); } catch (IOException e) { e.printStackTrace(); } }
} }
/** * 用于向服務(wù)器發(fā)送消息 * @author Administrator * */ class ClientThread extends Thread{ Socket s; BufferedWriter out; BufferedReader wt; public ClientThread(Socket s){ this.s = s; try { out=new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); wt=new BufferedReader(new InputStreamReader(System.in)); } catch (IOException e) { e.printStackTrace(); }
} public void run(){ try { while(true){ String str = wt.readLine(); out.write(str+"\n" ); out.flush(); } } catch (IOException e) { e.printStackTrace(); }finally{ try { wt.close(); } catch (IOException e) { e.printStackTrace(); } try { out.close(); } catch (IOException e) { e.printStackTrace(); } } } } |
「全棧Java筆記」是一部能幫大家從零到一成長(zhǎng)為全棧Java工程師系列筆記。筆者江湖人稱 Mr. G,10年Java研發(fā)經(jīng)驗(yàn),曾在神州數(shù)碼、航天院某所研發(fā)中心從事軟件設(shè)計(jì)及研發(fā)工作,從小白逐漸做到工程師、高級(jí)工程師、架構(gòu)師。精通Java平臺(tái)軟件開發(fā),精通JAVAEE,熟悉各種流行開發(fā)框架。
筆記包含從淺入深的六大部分:
A-Java入門階段
B-數(shù)據(jù)庫(kù)從入門到精通
C-手刃移動(dòng)前端和Web前端
D-J2EE從了解到實(shí)戰(zhàn)
E-Java高級(jí)框架精解
F-Linux和Hadoop
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。