本文主要介紹如何利用socket實現(xiàn)實時接收服務端發(fā)送的TCP消息。
目錄
一、需要掌握
二、程序源碼
三、運行演示
一、需要掌握
網絡調試助手下載:https://www.aliyundrive.com/s/6Y8L7Wv5sT6
網絡通信協(xié)議的理解:JAVA socket是基于TCP/IP協(xié)議實現(xiàn)的,需要對TCP/IP協(xié)議有一定的了解,包括TCP連接的建立、數(shù)據傳輸、斷開連接等方面。
1、多線程編程的實現(xiàn):為了能夠實時接收服務端發(fā)送的TCP消息,需要在客戶端程序中使用多線程編程模式,將數(shù)據接收和數(shù)據處理分別放在不同的線程中處理。
2、數(shù)據格式的解析:客戶端需要能夠正確地解析服務端發(fā)送的TCP消息,包括消息的格式、編碼方式等,同時還需要考慮錯誤處理和異常情況的處理。
3、數(shù)據的緩存和處理:由于網絡通信的不確定性,客戶端需要實現(xiàn)數(shù)據的緩存和處理,確保數(shù)據的完整性和準確性,并且能夠快速響應服務端發(fā)送的消息。
4、安全性的考慮:在實時接收服務端發(fā)送的TCP消息的過程中,需要考慮數(shù)據的安全性,包括數(shù)據的加密、防止數(shù)據被篡改等方面的問題。
二、程序源碼
package com.vblog.web.controller.system;
import java.io.*;
import java.net.*;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
/**
* @author Roc-xb
*/
public class TcpClient {
/**
* 主函數(shù)
*/
public static void main(String[] args) {
while (true) {
try {
InputStream is;
// 創(chuàng)建Socket對象,連接到指定的IP地址 和端口號
Socket socket = new Socket("127.0.0.1", 9001);
if (socket.isConnected()) {
System.out.println("socket連接成功:" + socket);
}
// 定義緩沖區(qū)
byte[] buff = new byte[1024];
// 設置讀取數(shù)據的超時時間為10秒
socket.setSoTimeout(10000);
// 獲取輸入流
is = socket.getInputStream();
while (true) {
try {
// 讀取數(shù)據
int readlen = 0;
if (is != null) {
readlen = is.read(buff);
}
// 將讀取到的數(shù)據復制到一個新的數(shù)組中
byte[] data = Arrays.copyOfRange(buff, 0, readlen);
// 解析數(shù)據
resolveData(data);
}
catch (SocketTimeoutException e1) {
System.out.println("等待TCP Server響應數(shù)據...");
}
catch (Exception e2) {
System.out.println("TCP Server已斷開連接...");
break;// 作用:避免TCP服務器斷開的時候,進入死循環(huán)
}
}
}
catch (ConnectException e4) {
System.out.println("TCP Server處于離線狀態(tài)...");
}
catch (Exception e5) {
System.out.println("其它異常信息:" + e5.getMessage());
}
}
}
public static String convertGBKToUTF8(String strGBK) {
Charset gbkCharset = Charset.forName("GBK");
Charset utf8Charset = Charset.forName("UTF-8");
byte[] gbkBytes = strGBK.getBytes(gbkCharset);
byte[] utf8Bytes = new String(gbkBytes, utf8Charset).getBytes(utf8Charset);
return new String(utf8Bytes, utf8Charset);
}
/**
* 解析數(shù)據
*
* @param data 待解析的數(shù)據
*/
private static void resolveData(byte[] data) {
// 將字節(jié)數(shù)組轉換為字符串
String message = new String(data);
// 對接收到的數(shù)據進行解析處理
System.out.println("服務器發(fā)送過來的數(shù)據包: " + message);
}
}
三、運行演示
文章來源:http://www.zghlxwxcb.cn/news/detail-504298.html
?以上代碼已經實現(xiàn)了TCP客戶端實時獲取TCP服務端消息發(fā)送的消息,并且可以感知TCP服務器在線/離線狀態(tài)。文章來源地址http://www.zghlxwxcb.cn/news/detail-504298.html
到了這里,關于JAVA Socket實現(xiàn)實時接收TCP消息,讓你的服務端通信更高效!的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!