首页 > 基础资料 博客日记
JAVA Socket实现实时接收TCP消息,让你的服务端通信更高效!
2023-07-24 10:54:09基础资料围观388次
文章JAVA Socket实现实时接收TCP消息,让你的服务端通信更高效!分享给大家,欢迎收藏Java资料网,专注分享技术知识
本文主要介绍如何利用socket实现实时接收服务端发送的TCP消息。
目录
一、需要掌握
网络通信协议的理解:JAVA socket是基于TCP/IP协议实现的,需要对TCP/IP协议有一定的了解,包括TCP连接的建立、数据传输、断开连接等方面。
1、多线程编程的实现:为了能够实时接收服务端发送的TCP消息,需要在客户端程序中使用多线程编程模式,将数据接收和数据处理分别放在不同的线程中处理。
2、数据格式的解析:客户端需要能够正确地解析服务端发送的TCP消息,包括消息的格式、编码方式等,同时还需要考虑错误处理和异常情况的处理。
3、数据的缓存和处理:由于网络通信的不确定性,客户端需要实现数据的缓存和处理,确保数据的完整性和准确性,并且能够快速响应服务端发送的消息。
4、安全性的考虑:在实时接收服务端发送的TCP消息的过程中,需要考虑数据的安全性,包括数据的加密、防止数据被篡改等方面的问题。
二、程序源码
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 {
/**
* 主函数
*/
public static void main(String[] args) {
while (true) {
try {
InputStream is;
// 创建Socket对象,连接到指定的IP地址 和端口号
Socket socket = new Socket("127.0.0.1", 9001);
if (socket.isConnected()) {
System.out.println("socket连接成功:" + socket);
}
// 定义缓冲区
byte[] buff = new byte[1024];
// 设置读取数据的超时时间为10秒
socket.setSoTimeout(10000);
// 获取输入流
is = socket.getInputStream();
while (true) {
try {
// 读取数据
int readlen = 0;
if (is != null) {
readlen = is.read(buff);
}
// 将读取到的数据复制到一个新的数组中
byte[] data = Arrays.copyOfRange(buff, 0, readlen);
// 解析数据
resolveData(data);
}
catch (SocketTimeoutException e1) {
System.out.println("等待TCP Server响应数据...");
}
catch (Exception e2) {
System.out.println("TCP Server已断开连接...");
break;// 作用:避免TCP服务器断开的时候,进入死循环
}
}
}
catch (ConnectException e4) {
System.out.println("TCP Server处于离线状态...");
}
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);
}
/**
* 解析数据
*
* @param data 待解析的数据
*/
private static void resolveData(byte[] data) {
// 将字节数组转换为字符串
String message = new String(data);
// 对接收到的数据进行解析处理
System.out.println("服务器发送过来的数据包: " + message);
}
}
三、运行演示
以上代码已经实现了TCP客户端实时获取TCP服务端消息发送的消息,并且可以感知TCP服务器在线/离线状态。
文章来源:https://blog.csdn.net/qq_19309473/article/details/131028283
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签: