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

免费网站软件广告设计网址

免费网站软件,广告设计网址,桂林北站到两江机场有多远,网站建设选择本地TCP通信的封装#xff0c;我们可以从以下几个方面进行改进#xff1a; 线程池优化#xff1a;使用更高效的线程池配置#xff0c;避免频繁创建和销毁线程。 连接重试机制#xff1a;在网络不稳定时#xff0c;自动重试连接。 心跳机制#xff1a;保持长连接#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://www.hkea.cn/news/14573000/

相关文章:

  • 最好的建站公司电子商务网站建设成果ppy
  • 上海网站开发外包公司企业内部网络属于什么网络
  • 办网站需要多少费用哪个网站做ppt好
  • 海洋专业做网站动漫设计与游戏制作学什么
  • 大连建设工业产品网站wordpress指定分类广告
  • 中国建站平台中国能建设计公司网站
  • 40个免费网站推广平台做行业网站能赚钱吗
  • 做网站公示东莞做个网站
  • 作风建设简报--门户网站怎么制作网站开发设计
  • 上海做网站的公司联系方式wordpress页面链接
  • 天河商城网站建设it培训机构出来能找到工作吗
  • 地方房地产网站seo实战案例分享flash网站收录
  • 米拓建站免费模板个人网页生成器
  • wordpress按修改时间排序搜索引擎优化seo
  • 汉中市网站建设商标注册网上缴费流程
  • 工体商城网站建设门户网站建设投入
  • 青冈县网站建设wordpress应用商城wpjam
  • 网站外链建设分析重庆网站建设公司招聘
  • 做设计有哪些好用的素材网站网上推广企业
  • 标准网站建设服务器搭建创新平台
  • 网游开发成本seo网络营销推广优化
  • html旅游网站页面设计模板怎么拥有自己的小程序
  • 模板网站建设明细报价表WordPress星光主题
  • 什么网站做推广比较好两学一做网站无法做题
  • 网站建设seo推广洞头区小程序模板源代码
  • 金华市金东区建设局网站合肥营销网站建设公司
  • 微信网站和手机网站的区别电子商务网站建设实训目的
  • 网站建设百度推广总结中国海洋大学站群网站建设
  • 华为云速建站可以做英文网站跟公司产品做网站
  • 网站备案信息抽查运营好网站