Java實現(xiàn)在線聊天功能
更新時間:2022年09月15日 10:31:03 作者:Lete樂特
這篇文章主要為大家詳細(xì)介紹了Java實現(xiàn)在線聊天功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了Java實現(xiàn)在線聊天功能的具體代碼,供大家參考,具體內(nèi)容如下
效果

關(guān)鍵代碼
創(chuàng)建Client.java
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
/**
?* @author Lete
?* @樂特的程序永無BUG
?* @createDate 2020- 07-04 22:13
?*
?* 1. SendThread 發(fā)送消息線程
?* 2. RecieveThread 接受消息線程
?*/
public class Client {
? ? public static void main(String[] args) {
? ? ? ? try {
? ? ? ? ? ? // 創(chuàng)建8888端口
? ? ? ? ? ? Socket s = new Socket("127.0.0.1", 8888);
? ? ? ? ? ? // 啟動發(fā)送消息線程
? ? ? ? ? ? new SendThread(s).start();
? ? ? ? ? ? // 啟動接受消息線程
? ? ? ? ? ? new RecieveThread(s).start();
? ? ? ? } catch (UnknownHostException e) {
? ? ? ? ? ? // TODO Auto-generated catch block
? ? ? ? ? ? e.printStackTrace();
? ? ? ? } catch (IOException e) {
? ? ? ? ? ? // TODO Auto-generated catch block
? ? ? ? ? ? e.printStackTrace();
? ? ? ? }
? ? }
}創(chuàng)建Server.java
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
/**
?* @author Lete
?* @樂特的程序永無BUG
?* @createDate 2020- 07-04 22:13
?*
?* 1. SendThread 發(fā)送消息線程
?* 2. RecieveThread 接受消息線程
?*/
public class Server {
? ? public static void main(String[] args) {
? ? ? ? try {
? ? ? ? ? ? // 監(jiān)聽8888端口
? ? ? ? ? ? ServerSocket ss = new ServerSocket(8888);
? ? ? ? ? ? System.out.println("監(jiān)聽在端口號:8888");
? ? ? ? ? ? Socket s = ss.accept();
? ? ? ? ? ? //啟動發(fā)送消息線程
? ? ? ? ? ? new SendThread(s).start();
? ? ? ? ? ? //啟動接受消息線程
? ? ? ? ? ? new RecieveThread(s).start();
? ? ? ? } catch (IOException e) {
? ? ? ? ? ? // TODO Auto-generated catch block
? ? ? ? ? ? e.printStackTrace();
? ? ? ? }
? ? }
}創(chuàng)建RecieveThread.java
import java.io.*;
import java.net.Socket;
/**
?* @author Lete
?* @樂特的程序永無BUG
?* @createDate 2020- 07-04 22:13
?*
?* 1. SendThread 發(fā)送消息線程
?* 2. RecieveThread 接受消息線程
?*/
public class RecieveThread extends Thread {
? ? private Socket s;
? ? public RecieveThread(Socket s) {
? ? ? ? this.s = s;
? ? }
? ? public void run() {
? ? ? ? try {
? ? ? ? ? ? // 接收對方輸入的內(nèi)容
? ? ? ? ? ? InputStream is = s.getInputStream();
? ? ? ? ? ? DataInputStream dis = new DataInputStream(is);
? ? ? ? ? ? while (true) {
? ? ? ? ? ? ? ? String msg = dis.readUTF();
? ? ? ? ? ? ? ? System.out.println(msg);
? ? ? ? ? ? }
? ? ? ? } catch (IOException e) {
? ? ? ? ? ? // TODO Auto-generated catch block
? ? ? ? ? ? e.printStackTrace();
? ? ? ? }
? ? }
}創(chuàng)建SendThread.java
import java.io.*;
import java.net.Socket;
import java.util.Scanner;
/**
?* @author Lete
?* @樂特的程序永無BUG
?* @createDate 2020- 07-04 22:13
?*
?* 1. SendThread 發(fā)送消息線程
?* 2. RecieveThread 接受消息線程
?*/
public class SendThread extends Thread {
? ? private Socket s;
? ? public SendThread(Socket s) {
? ? ? ? this.s = s;
? ? }
? ? public void run() {
? ? ? ? try {
? ? ? ? ? ? // 獲取輸入的內(nèi)容
? ? ? ? ? ? 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) {
? ? ? ? ? ? // TODO Auto-generated catch block
? ? ? ? ? ? e.printStackTrace();
? ? ? ? }
? ? }
}以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot?自定義starter?yaml提示失效問題及解決方法
在自定義starter后,必不可少會有properties配置參數(shù)需要指定,而在有時又不知道為什么出現(xiàn)這個問題,這篇文章主要介紹了SpringBoot?自定義starter?yaml提示失效問題,需要的朋友可以參考下2022-12-12
JAVA并發(fā)中VOLATILE關(guān)鍵字的神奇之處詳解
這篇文章主要給大家介紹了關(guān)于JAVA并發(fā)中VOLATILE關(guān)鍵字的神奇之處的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05
Spring?Boot配置內(nèi)容加密實現(xiàn)敏感信息保護
之前我們講過的配置相關(guān)知識都是Spring?Boot原生就提供的,而今天我們將介紹的功能并非Spring?Boot原生就支持,但卻非常有用:配置內(nèi)容的加密2021-11-11
使用Mybatis-Plus實現(xiàn)對象屬性自動填充功能
這篇文章主要介紹了如何使用Mybatis-Plus實現(xiàn)對象屬性自動填充功能,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,感興趣的朋友們下面隨著小編來一起來學(xué)習(xí)吧2024-01-01

