当前位置: 首页 > wzjs >正文

企业网站如何做架构图购物网站用模板好不好

企业网站如何做架构图,购物网站用模板好不好,西丽做网站,目录更新 wordpressTCP通信的封装,我们可以从以下几个方面进行改进: 线程池优化:使用更高效的线程池配置,避免频繁创建和销毁线程。 连接重试机制:在网络不稳定时,自动重试连接。 心跳机制:保持长连接&#xff…

TCP通信的封装,我们可以从以下几个方面进行改进:

线程池优化:使用更高效的线程池配置,避免频繁创建和销毁线程。

连接重试机制:在网络不稳定时,自动重试连接。

心跳机制:保持长连接,避免因超时断开。

数据缓冲区优化:动态调整缓冲区大小,适应不同数据量。

异常处理增强:区分不同类型的异常,提供更详细的错误信息。

代码简洁性:减少冗余代码,提高可读性和可维护性。

TCP客户端封装(Java)

import android.util.Log;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;public class TcpClient {private static final String TAG = "TcpClient";private static final int HEARTBEAT_INTERVAL = 10; // 心跳间隔(秒)private static final int CONNECT_TIMEOUT = 5000; // 连接超时时间(毫秒)private static final int RECONNECT_DELAY = 3000; // 重连延迟时间(毫秒)private Socket socket;private InputStream inputStream;private OutputStream outputStream;private ExecutorService executorService;private ScheduledExecutorService heartbeatExecutor;private boolean isConnected = false;private TcpListener listener;private String serverIp;private int serverPort;public TcpClient(TcpListener listener) {this.listener = listener;executorService = Executors.newCachedThreadPool();heartbeatExecutor = Executors.newSingleThreadScheduledExecutor();}/*** 连接到服务器** @param ip   服务器IP地址* @param port 服务器端口*/public void connect(String ip, int port) {this.serverIp = ip;this.serverPort = port;executorService.execute(this::connectInternal);}private void connectInternal() {try {// 创建Socket并连接服务器socket = new Socket();socket.connect(new InetSocketAddress(serverIp, serverPort), CONNECT_TIMEOUT);inputStream = socket.getInputStream();outputStream = socket.getOutputStream();isConnected = true;// 通知连接成功if (listener != null) {listener.onConnected();}// 开始接收数据receiveData();// 启动心跳机制startHeartbeat();} catch (IOException e) {Log.e(TAG, "Connection failed: " + e.getMessage());if (listener != null) {listener.onError("Connection failed: " + e.getMessage());}scheduleReconnect();}}/*** 断开连接*/public void disconnect() {executorService.execute(() -> {try {if (socket != null) {socket.close();}if (inputStream != null) {inputStream.close();}if (outputStream != null) {outputStream.close();}isConnected = false;// 通知断开连接if (listener != null) {listener.onDisconnected();}} catch (IOException e) {Log.e(TAG, "Disconnect error: " + e.getMessage());} finally {stopHeartbeat();}});}/*** 发送数据** @param data 要发送的数据*/public void sendData(byte[] data) {if (!isConnected || outputStream == null) {Log.e(TAG, "Not connected to server");return;}executorService.execute(() -> {try {outputStream.write(data);outputStream.flush();Log.d(TAG, "Data sent successfully");} catch (IOException e) {Log.e(TAG, "Failed to send data: " + e.getMessage());if (listener != null) {listener.onError("Failed to send data: " + e.getMessage());}disconnect();}});}/*** 接收数据*/private void receiveData() {executorService.execute(() -> {byte[] buffer = new byte[1024];int bytesRead;while (isConnected) {try {bytesRead = inputStream.read(buffer);if (bytesRead == -1) {// 服务器关闭连接disconnect();break;}// 处理接收到的数据byte[] receivedData = new byte[bytesRead];System.arraycopy(buffer, 0, receivedData, 0, bytesRead);// 通知数据接收if (listener != null) {listener.onDataReceived(receivedData);}} catch (IOException e) {Log.e(TAG, "Failed to receive data: " + e.getMessage());if (listener != null) {listener.onError("Failed to receive data: " + e.getMessage());}disconnect();break;}}});}/*** 启动心跳机制*/private void startHeartbeat() {heartbeatExecutor.scheduleAtFixedRate(() -> {if (isConnected) {sendData("HEARTBEAT".getBytes()); // 发送心跳包}}, HEARTBEAT_INTERVAL, HEARTBEAT_INTERVAL, TimeUnit.SECONDS);}/*** 停止心跳机制*/private void stopHeartbeat() {heartbeatExecutor.shutdown();}/*** 安排重连*/private void scheduleReconnect() {executorService.schedule(this::connectInternal, RECONNECT_DELAY, TimeUnit.MILLISECONDS);}/*** 是否已连接*/public boolean isConnected() {return isConnected;}/*** 关闭线程池*/public void shutdown() {executorService.shutdown();heartbeatExecutor.shutdown();}/*** TCP事件监听器*/public interface TcpListener {void onConnected(); // 连接成功void onDisconnected(); // 断开连接void onDataReceived(byte[] data); // 接收到数据void onError(String error); // 发生错误}
}

2. 在Activity中使用

import android.os.Bundle;
import android.util.Log;
import androidx.appcompat.app.AppCompatActivity;public class MainActivity extends AppCompatActivity implements TcpClient.TcpListener {private static final String SERVER_IP = "192.168.1.100"; // 服务器IPprivate static final int SERVER_PORT = 8080; // 服务器端口private TcpClient tcpClient;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 初始化TCP客户端tcpClient = new TcpClient(this);// 连接到服务器tcpClient.connect(SERVER_IP, SERVER_PORT);// 发送数据String message = "Hello, Server!";tcpClient.sendData(message.getBytes());}@Overridepublic void onConnected() {Log.d("TcpClient", "Connected to server");}@Overridepublic void onDisconnected() {Log.d("TcpClient", "Disconnected from server");}@Overridepublic void onDataReceived(byte[] data) {String message = new String(data);Log.d("TcpClient", "Received data: " + message);}@Overridepublic void onError(String error) {Log.e("TcpClient", "Error: " + error);}@Overrideprotected void onDestroy() {super.onDestroy();// 断开连接并释放资源if (tcpClient != null) {tcpClient.disconnect();tcpClient.shutdown();}}
}

进一步优化(Kotlin版本)

import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import kotlinx.coroutines.*
import java.io.IOException
import java.io.InputStream
import java.io.OutputStream
import java.net.InetSocketAddress
import java.net.Socketclass MainActivity : AppCompatActivity(), TcpClient.TcpListener {private val serverIp = "192.168.1.100" // 服务器IPprivate val serverPort = 8080 // 服务器端口private lateinit var tcpClient: TcpClientoverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)// 初始化TCP客户端tcpClient = TcpClient(this)// 连接到服务器tcpClient.connect(serverIp, serverPort)// 发送数据val message = "Hello, Server!"tcpClient.sendData(message.toByteArray())}override fun onConnected() {Log.d("TcpClient", "Connected to server")}override fun onDisconnected() {Log.d("TcpClient", "Disconnected from server")}override fun onDataReceived(data: ByteArray) {val message = String(data)Log.d("TcpClient", "Received data: $message")}override fun onError(error: String) {Log.e("TcpClient", "Error: $error")}override fun onDestroy() {super.onDestroy()// 断开连接并释放资源tcpClient.disconnect()tcpClient.shutdown()}
}class TcpClient(private val listener: TcpListener) {private var socket: Socket? = nullprivate var inputStream: InputStream? = nullprivate var outputStream: OutputStream? = nullprivate var isConnected = falseprivate val scope = CoroutineScope(Dispatchers.IO)private var heartbeatJob: Job? = nullfun connect(ip: String, port: Int) {scope.launch {try {socket = Socket().apply {connect(InetSocketAddress(ip, port), 5000) // 5秒超时}inputStream = socket?.getInputStream()outputStream = socket?.getOutputStream()isConnected = truewithContext(Dispatchers.Main) {listener.onConnected()}receiveData()startHeartbeat()} catch (e: IOException) {withContext(Dispatchers.Main) {listener.onError("Connection failed: ${e.message}")}scheduleReconnect()}}}fun disconnect() {scope.launch {try {socket?.close()inputStream?.close()outputStream?.close()isConnected = falsewithContext(Dispatchers.Main) {listener.onDisconnected()}} catch (e: IOException) {withContext(Dispatchers.Main) {listener.onError("Disconnect error: ${e.message}")}} finally {stopHeartbeat()}}}fun sendData(data: ByteArray) {if (!isConnected || outputStream == null) {Log.e("TcpClient", "Not connected to server")return}scope.launch {try {outputStream?.write(data)outputStream?.flush()Log.d("TcpClient", "Data sent successfully")} catch (e: IOException) {withContext(Dispatchers.Main) {listener.onError("Failed to send data: ${e.message}")}disconnect()}}}private fun receiveData() {scope.launch {val buffer = ByteArray(1024)var bytesRead: Intwhile (isConnected) {try {bytesRead = inputStream?.read(buffer) ?: -1if (bytesRead == -1) {disconnect()break}val receivedData = buffer.copyOf(bytesRead)withContext(Dispatchers.Main) {listener.onDataReceived(receivedData)}} catch (e: IOException) {withContext(Dispatchers.Main) {listener.onError("Failed to receive data: ${e.message}")}disconnect()break}}}}private fun startHeartbeat() {heartbeatJob = scope.launch {while (isConnected) {sendData("HEARTBEAT".toByteArray())delay(10000) // 10秒间隔}}}private fun stopHeartbeat() {heartbeatJob?.cancel()}private fun scheduleReconnect() {scope.launch {delay(3000) // 3秒后重连connect(socket?.inetAddress?.hostAddress ?: "", socket?.port ?: 0)}}fun shutdown() {scope.cancel()}interface TcpListener {fun onConnected()fun onDisconnected()fun onDataReceived(data: ByteArray)fun onError(error: String)}
}

文章转载自:

http://Vfx06RcO.ryxgk.cn
http://3wM0VfAK.ryxgk.cn
http://r25Qn5Qz.ryxgk.cn
http://eUV2E520.ryxgk.cn
http://docmMXM8.ryxgk.cn
http://cQg6GyYw.ryxgk.cn
http://i7Ne0vxH.ryxgk.cn
http://m7nv5Ato.ryxgk.cn
http://jbStGg6r.ryxgk.cn
http://6iYMhBih.ryxgk.cn
http://jAHiuYFF.ryxgk.cn
http://4qKExlyh.ryxgk.cn
http://52JbjNMi.ryxgk.cn
http://XpQbgZI8.ryxgk.cn
http://VgkT0t9q.ryxgk.cn
http://ZQKmfIPf.ryxgk.cn
http://f5PNbBXn.ryxgk.cn
http://wwkmXKtN.ryxgk.cn
http://7p9e6kaX.ryxgk.cn
http://mOMvlChV.ryxgk.cn
http://bp6KoDDL.ryxgk.cn
http://ZdCPyVq5.ryxgk.cn
http://WRefYfbj.ryxgk.cn
http://8B57p31G.ryxgk.cn
http://Qie6Thg3.ryxgk.cn
http://f25mJ8fd.ryxgk.cn
http://dIHtLMGb.ryxgk.cn
http://Ylg3N4HR.ryxgk.cn
http://qDTxK2PS.ryxgk.cn
http://N08134yj.ryxgk.cn
http://www.dtcms.com/wzjs/604820.html

相关文章:

  • 织梦做的网站老是被黑直播带货平台
  • 邢台移动网站设计免费微信公众号素材网
  • 哈尔滨网站开发渠道建设银行理财产品网站
  • 重庆网站建设公司 夹夹虫好做响应式网站的价格
  • 山东网站建设服务外贸网站建站用什么意思
  • 网站建设大小免费网站服务器推荐
  • 备案后怎么建设网站flash网站制作教程
  • 建网站能挣钱吗住房建设危房改造网站
  • 南涧县城乡建设局网站宁波网站优化技术
  • 银川网站开发公司seo是做网站源码还是什么
  • 合肥网站建设方案维护企业做网站有哪些好处
  • 青岛网站建设服务器做网站设计工作的报告
  • 揭阳网站制作多少钱网站做哪家最专业广州
  • 温州建网站业务人员东莞网站建设制作软件
  • 手机商城系统哪个好网站seo优化推广怎么做
  • 建设网站用凡科怎么样长春 行业网站
  • 西安西郊网站建设网址域名是什么
  • 宜昌市住房和城乡建设局网站免费网站登陆模板
  • 遵义晚报电子版官方网站装修效果图免费软件
  • 天商阳光网站邮箱项目网上备案查询系统
  • 建设银行贵阳市网站电话wordpress如何添加目录菜单
  • 淘宝联盟+做网站wordpress博客缩略图
  • wordpress 作品展福州seo招聘
  • 做婚庆网站有哪些内容杭州发布官网
  • 网店美工设计论文爱站seo工具包免费版
  • 遂昌建设局网站河南郑州网站制作公司
  • 网站建设与维护成本网站做会员系统
  • 衡水微信网站建设微商营销宝最新版
  • 网站建设kaicz大型门户网站的建设外包在本公司制作好还是
  • 南京企业网站设计公司十大网站建设公司