本文小編為大家詳細(xì)介紹“Java網(wǎng)絡(luò)編程如何實(shí)現(xiàn)多線程聊天”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“Java網(wǎng)絡(luò)編程如何實(shí)現(xiàn)多線程聊天”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識吧。
站在用戶的角度思考問題,與客戶深入溝通,找到松滋網(wǎng)站設(shè)計(jì)與松滋網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站制作、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、申請域名、網(wǎng)站空間、企業(yè)郵箱。業(yè)務(wù)覆蓋松滋地區(qū)。
解決方法:
將收發(fā)放到兩個不同的線程
1. SendThread 發(fā)送消息線程
2. RecieveThread 接受消息線程
3. Server一旦接受到連接,就啟動收發(fā)兩個線程
4. Client 一旦建立了連接,就啟動收發(fā)兩個線程
1 SendThread
package socket; import java.io.DataOutputStream; import java.io.IOException; import java.io.OutputStream; import java.net.Socket; import java.util.Scanner; public class SendThread extends Thread { private Socket s; public SendThread(Socket s) { this.s = s; } @Override public void run() { try { OutputStream os = s.getOutputStream(); DataOutputStream dos = new DataOutputStream(os); while(true){ Scanner sc = new Scanner(System.in); String str = sc.next(); dos.writeUTF(str); } } catch (IOException e) { e.printStackTrace(); } } }
2 RecieveThread
package socket; import java.io.DataInputStream; import java.io.IOException; import java.io.InputStream; import java.net.Socket; public class RecieveThread extends Thread { private Socket s; public RecieveThread(Socket s) { this.s = s; } @Override public void run() { InputStream is = null; try { is = s.getInputStream(); DataInputStream dis = new DataInputStream(is); while(true){ String msg = dis.readUTF(); System.out.println(msg); } } catch (IOException e) { e.printStackTrace(); } } }
3 Server
package socket; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; public class Server { public static void main(String[] args) { try { ServerSocket ss = new ServerSocket(8888); System.out.println("監(jiān)聽端口號:8888"); Socket s = ss.accept(); new SendThread(s).start(); new RecieveThread(s).start(); } catch (IOException e) { e.printStackTrace(); } } }
4 Client
package socket; import java.io.IOException; import java.net.Socket; import java.net.UnknownHostException; public class Client { public static void main(String[] args) { try { Socket s = new Socket("127.0.0.1", 8888); new SendThread(s).start(); new RecieveThread(s).start(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
Server
package socket; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.DataInputStream; import java.io.DataOutputStream; import java.net.ServerSocket; import java.net.Socket; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JTextArea; import javax.swing.JTextField; public class GUIServer { public static void main(String[] args) throws Exception { JFrame f = new JFrame(); f.setTitle("server"); f.setSize(400, 300); f.setLocation(100, 200); f.setLayout(null); JButton b = new JButton("send"); b.setBounds(10, 10, 80, 30); f.add(b); final JTextField tf = new JTextField(); tf.setBounds(10, 110, 80, 30); f.add(tf); final JTextArea ta = new JTextArea(); ta.setBounds(110,10, 200, 300); f.add(ta); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); ServerSocket ss = new ServerSocket(8888); System.out.println("listenning on port:8888"); final Socket s = ss.accept(); new Thread() { public void run() { while (true) { try { DataInputStream dis = new DataInputStream( s.getInputStream()); String text = dis.readUTF(); ta.append(text+"\r\n"); } catch (Exception e) { e.printStackTrace(); } } } }.start(); b.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String text = tf.getText(); ta.append(text+"\r\n"); try { DataOutputStream dos = new DataOutputStream( s.getOutputStream()); dos.writeUTF(text); } catch (Exception ex) { ex.printStackTrace(); } } }); } }
Client
package socket; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.DataInputStream; import java.io.DataOutputStream; import java.net.Socket; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JTextArea; import javax.swing.JTextField; public class GUIClient { public static void main(String[] args) throws Exception { JFrame f = new JFrame(); f.setTitle("client"); f.setSize(400, 300); f.setLocation(600, 200); f.setLayout(null); JButton b = new JButton("send"); b.setBounds(10, 10, 80, 30); f.add(b); final JTextField tf = new JTextField(); tf.setBounds(10, 110, 80, 30); f.add(tf); final JTextArea ta = new JTextArea(); ta.setBounds(110,10, 200, 300); f.add(ta); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); final Socket s = new Socket("127.0.0.1", 8888); new Thread() { public void run() { while (true) { try { DataInputStream dis = new DataInputStream( s.getInputStream()); String text = dis.readUTF(); ta.append(text+"\r\n"); } catch (Exception e) { e.printStackTrace(); } } } }.start(); b.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String text = tf.getText(); ta.append(text+"\r\n"); try { DataOutputStream dos = new DataOutputStream( s.getOutputStream()); dos.writeUTF(text); } catch (Exception ex) { ex.printStackTrace(); } } }); } }
讀到這里,這篇“Java網(wǎng)絡(luò)編程如何實(shí)現(xiàn)多線程聊天”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識點(diǎn)還需要大家自己動手實(shí)踐使用過才能領(lǐng)會,如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
當(dāng)前名稱:Java網(wǎng)絡(luò)編程如何實(shí)現(xiàn)多線程聊天
標(biāo)題來源:http://aaarwkj.com/article46/jejdhg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、、網(wǎng)站改版、建站公司、網(wǎng)站設(shè)計(jì)、商城網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)