java實(shí)現(xiàn)簡單TCP聊天程序
本文實(shí)例為大家分享了java實(shí)現(xiàn)TCP聊天程序的具體代碼,供大家參考,具體內(nèi)容如下
服務(wù)端代碼:
package com.test.server; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; public class Server { public static void main(String[] args) { new Server().startServer(); } public void startServer(){ try { //服務(wù)器在9990端口監(jiān)聽客戶端的連接 ServerSocket ss = new ServerSocket(9999); System.out.println("server is listening..."); while(true){ //阻塞的accept方法,當(dāng)一個(gè)客戶端連接上,才會(huì)返回Socket對象 Socket s = ss.accept(); System.out.println("a client has connected!"); //開啟線程處理通信 new CommunicateThread(s).start(); } } catch (IOException e) { e.printStackTrace(); } } public class CommunicateThread extends Thread{ Socket socket; DataInputStream dis; DataOutputStream dos; public CommunicateThread(Socket socket){ this.socket = socket; try { dis = new DataInputStream(socket.getInputStream()); dos = new DataOutputStream(socket.getOutputStream()); } catch (IOException e) { e.printStackTrace(); } } @Override public void run() { super.run(); //讀取客戶端發(fā)過來的消息 String msg = null; try { while((msg = dis.readUTF()) != null){ System.out.println("client send msg :" + msg); String replyMsg = "server reply : " + msg; dos.writeUTF(replyMsg); System.out.println("server reply msg :" + replyMsg); } } catch (IOException e) { e.printStackTrace(); } } } }
客戶端代碼:
package com.test.client; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.Socket; import java.util.Scanner; public class Client { public static void main(String[] args) { new Client().startClient(); } public void startClient(){ try { //連接到服務(wù)器 Socket socket = new Socket("localhost", 9999); DataInputStream dis = new DataInputStream(socket.getInputStream()); DataOutputStream dos = new DataOutputStream(socket.getOutputStream()); Scanner scanner = new Scanner(System.in); String line = null; listenServerReply(dis); while((line = scanner.nextLine()) != null){//讀取從鍵盤輸入的一行 dos.writeUTF(line);//發(fā)給服務(wù)端 System.out.println("client send msg : " + line); } } catch (Exception e) { e.printStackTrace(); } } //監(jiān)聽服務(wù)端回復(fù)的消息 public void listenServerReply(final DataInputStream dis){ new Thread(){ @Override public void run() { super.run(); String line = null; try { while((line = dis.readUTF()) != null){ System.out.println("client receive msg from server: " + line); } } catch (IOException e) { e.printStackTrace(); } } }.start(); } }
先啟動(dòng)服務(wù)端,再啟動(dòng)客戶端,在客戶端的控制臺(tái)輸入消息并回車,就可以發(fā)送消息給客戶端了,客戶端收到消息后,馬上會(huì)回復(fù)一個(gè)消息
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- java中UDP簡單聊天程序?qū)嵗a
- 詳解基于java的Socket聊天程序——客戶端(附demo)
- java網(wǎng)絡(luò)編程學(xué)習(xí)java聊天程序代碼分享
- java基于TCP協(xié)議實(shí)現(xiàn)聊天程序
- java基于C/S模式實(shí)現(xiàn)聊天程序(客戶端)
- 詳解基于java的Socket聊天程序——服務(wù)端(附demo)
- java實(shí)現(xiàn)基于Tcp的socket聊天程序
- 詳解基于java的Socket聊天程序——初始設(shè)計(jì)(附demo)
- 基于Java的Socket多客戶端Client-Server聊天程序的實(shí)現(xiàn)
- 用Java實(shí)現(xiàn)聊天程序
相關(guān)文章
Java Socket報(bào)錯(cuò)打開文件過多的問題
這篇文章主要介紹了Java Socket報(bào)錯(cuò)打開文件過多的問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05教你用springboot連接mysql并實(shí)現(xiàn)增刪改查
今天教各位小伙伴用springboot連接mysql并實(shí)現(xiàn)增刪改查功能,文中有非常詳細(xì)的步驟及代碼示例,對正在學(xué)習(xí)Java的小伙伴們有非常好的幫助,需要的朋友可以參考下2021-05-05Java中Iterator與ListIterator迭代的區(qū)別
本文主要介紹了Java中Iterator與ListIterator迭代的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-07-07JavaMe開發(fā)自適應(yīng)滾動(dòng)顯示
我們??吹揭恍L動(dòng)顯示的實(shí)例,比如UC瀏覽器中,顯示網(wǎng)頁的內(nèi)容。當(dāng)內(nèi)容比較多時(shí),采用滾動(dòng)分頁顯示是合理的。在Canvas中繪圖中,多余的內(nèi)容被截?cái)嗔恕H绾螌?shí)現(xiàn)滾動(dòng)分頁顯示呢?2015-09-09Java8 Stream中對集合數(shù)據(jù)進(jìn)行快速匹配和賦值的代碼示例
這篇文章主要介紹了Java8 Stream中如何對集合數(shù)據(jù)進(jìn)行快速匹配和賦值,文中通過代碼示例為大家介紹的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下2023-06-06