網站首頁 編程語言 正文
在上一篇博客中聊天的功能已經實現,但為了更為方便發送和接收信息,將代碼合并(客戶端和服務端一起處理),全部代碼如下:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
/**
* 發送消息線程
*/
class Send1 extends Thread{
private Socket socket;
private Scanner scanner;
public Send1(Socket socket,Scanner scanner){
this.socket = socket;
this.scanner = scanner;
}
@Override
public void run() {
this.sendMsg();
}
/**
* 發送消息
*/
private void sendMsg(){
//創建向對方輸出消息的流對象
try(PrintWriter pw = new PrintWriter(this.socket.getOutputStream())){
while(true){
String msg = scanner.nextLine();
pw.println(msg);
pw.flush();
}
}catch(Exception e){
e.printStackTrace();
}
}
}
/**
* 接收消息的線程
*/
class Receive1 extends Thread{
private Socket socket;
public Receive1(Socket socket){
this.socket = socket;
}
@Override
public void run() {
this.receiveMsg();
}
/**
* 用于接收對方消息的方法
*/
private void receiveMsg(){
//創建用于接收對方發送消息的流對象
try(BufferedReader br = new BufferedReader(new InputStreamReader(this.socket.getInputStream()))){
while(true){
String msg = br.readLine();
System.out.println("他說:"+msg);
}
}catch(Exception e){
e.printStackTrace();
}
}
}
public class GoodTCP {
public static void main(String[] args) {
ServerSocket serverSocket = null;
Socket socket = null;
try{
//實例化鍵盤輸入
Scanner scanner = new Scanner(System.in);
System.out.println("請輸入:server,<port>或者:<ip>,<port>");
String str = scanner.nextLine();
String[] arr = str.split(",");
if("server".equals(arr[0])){
//啟動服務端
System.out.println("TCP Server Listen at "+arr[1]+".......");
serverSocket = new ServerSocket(Integer.parseInt(arr[1]));
socket = serverSocket.accept();
}else{
//啟動客戶端
socket = new Socket(arr[0],Integer.parseInt(arr[1]));
System.out.println("連接成功!");
}
//啟動發送消息的線程
new Send1(socket,scanner).start();
//啟動接收消息的線程
new Receive1(socket).start();
}catch(Exception e){
e.printStackTrace();
}finally{
if(serverSocket!=null){
try {
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
代碼需運行兩次,一次作為客戶端,一次作為服務端,實現點對點的聊天功能。
原文鏈接:https://blog.csdn.net/m0_73944607/article/details/130893883
- 上一篇:沒有了
- 下一篇:沒有了
相關推薦
- 2022-10-18 AJAX請求以及解決跨域問題詳解_AJAX相關
- 2022-09-19 Python?Numpy中ndarray的常見操作_python
- 2022-10-17 C++模擬實現vector的示例代碼_C 語言
- 2022-10-28 Python圖形用戶界面與游戲開發實例詳解_python
- 2022-11-01 go語言中for?range使用方法及避坑指南_Golang
- 2022-08-01 為MongoDB數據庫注冊windows服務_MongoDB
- 2023-11-23 python怎么判斷電腦環境是32位還是64位
- 2022-04-21 C#實現chart控件動態曲線繪制_C#教程
- 欄目分類
-
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支