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)客戶端,在客戶端的控制臺輸入消息并回車,就可以發(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)文章
Json轉(zhuǎn)化為Java對象的實(shí)例詳解
這篇文章主要介紹了Json轉(zhuǎn)化為Java對象的實(shí)例詳解的相關(guān)資料,前后端數(shù)據(jù)交互的情況經(jīng)常會(huì)遇到Json串與java 對象的相互轉(zhuǎn)換方便操作,需要的朋友可以參考下2017-08-08
Java學(xué)習(xí)筆記:關(guān)于Java?double類型相加問題
這篇文章主要介紹了關(guān)于Java?double類型相加問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12
Java使用Canal同步MySQL數(shù)據(jù)到Redis
在現(xiàn)代微服務(wù)架構(gòu)中,數(shù)據(jù)同步是一個(gè)常見的需求,特別是將?MySQL?數(shù)據(jù)實(shí)時(shí)同步到?Redis,下面我們就來看看Java如何使用Canal同步MySQL數(shù)據(jù)到Redis吧2024-11-11
java虛擬機(jī)參數(shù)-D、-X和-XX的區(qū)別小結(jié)
本文主要介紹了java虛擬機(jī)參數(shù)-D、-X和-XX的區(qū)別小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06
SpringSecurity?認(rèn)證實(shí)現(xiàn)流程分析
SpringSecurity框架通過一個(gè)過濾器鏈來處理認(rèn)證和授權(quán),主要包括UsernamePasswordAuthenticationFilter負(fù)責(zé)處理登錄請求,本文給大家介紹SpringSecurity?認(rèn)證實(shí)現(xiàn)登錄校驗(yàn),感興趣的朋友跟隨小編一起看看吧2024-10-10
詳解SpringBoot中的統(tǒng)一功能處理的實(shí)現(xiàn)
這篇文章主要為大家詳細(xì)介紹了SpringBoot如何實(shí)現(xiàn)統(tǒng)一功能處理,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)或工作有一定借鑒價(jià)值,需要的可以參考一下2023-01-01
SpringBoot用實(shí)體接收Get請求傳遞過來的多個(gè)參數(shù)的兩種方式
本文主要介紹SpringBoot用實(shí)體接收Get請求傳遞過來的多個(gè)參數(shù),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04

