`

简单的长连接demo

 
阅读更多

 

client端

/**
 * 
 */
package com.client;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.SocketTimeoutException;

import org.apache.log4j.Logger;

/**
 * socket 长连接客户端
 * @author lizt
 * @version 1.0.0
 */
public class ClientSocket {
	private Logger logger = Logger.getLogger(ClientSocket.class);
	
	private String ip = "131.1.2.14";
	private int port = 9090;
	private Socket client = null;
	
	private Integer sotimeout = 10 * 1000;// 超时时间,以毫秒为单位 
	private Integer sleeptime = 5 * 1000;
	
	private void conncet() {
		do {
			try {
				client = new Socket(ip, port);
				client.setKeepAlive(true);// 开启保持活动状态的套接字 
				client.setTcpNoDelay(true);
				client.setSoTimeout(sotimeout);// 设置超时时间
				
				logger.info("*** " + client);
				
				sendData();
			} catch (java.net.ConnectException e) {
				logger.error(e.getMessage());
			} catch (SocketTimeoutException e) {
				logger.error(e.getMessage());
			} catch (Exception e) {
				logger.error(e.getMessage(), e);
			} finally {
				if(client != null)
					try {
						client.close();
					} catch (IOException e) {
					}
			}
			
			try {
				Thread.sleep(3 * 1000);
			} catch (InterruptedException e) {
			}
		} while (true);
	}
	
	private void sendData() throws IOException, InterruptedException {
		PrintWriter out = new PrintWriter(client.getOutputStream(), true);
		BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
		
		do {
			long stime = System.currentTimeMillis();
			String request = Long.toString(stime);
					
			out.println(request);
			out.flush();
			
			logger.info("client >>> " + request);
			
			String response = in.readLine();
			
			logger.info("client <<< " + response + " " + (System.currentTimeMillis() - stime) + "ms");
			
			if(response == null)
				throw new IOException("socket is closed.");
			
			Thread.sleep(sleeptime);
		} while (true);
	}
	

	public static void main(String[] args) {
		ClientSocket clientSocket = new ClientSocket();
		clientSocket.conncet();
	}

}

 server端

package com.server;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;

import org.apache.log4j.Logger;

/**
 * socket 长连接服务端
 * @author lizt
 * @version 1.0.0
 */
public class ServerSocket implements Runnable {
	private static final int timeout = 10 * 1000;

	private Logger logger = Logger.getLogger(ServerSocket.class);
	
	private String returnStr = "|00";
	private java.net.ServerSocket server;

	public void run() {
		logger.info("server java socket start to accept...");
		
		try {
			server = new java.net.ServerSocket(9090,1);
			
		} catch (IOException e) {
			logger.error(e.getMessage(), e);
			
			System.exit(-1);
		}
		
		do {
			try {
				accept();
			} catch (Exception e) {
				logger.error(e.getMessage(), e);
			}
		} while (true);
	}

	private void accept() throws IOException {
		Socket client = server.accept();
		client.setKeepAlive(true);
		client.setSoTimeout(timeout);
		
		logger.info(client);
		
		BufferedReader in = null;
		BufferedWriter out = null;
		try {
			in = new BufferedReader(new InputStreamReader(client.getInputStream()));
			out = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
			
			String line = null;
			while((line = in.readLine()) != null) {
				logger.info("server accept datas  <<< : " + line);
				
				out.write(line + returnStr);
				out.newLine();
				out.flush();
			}
		} catch (Exception e) {
			logger.error(e.getMessage(), e);
		} finally {
			if(in != null)
				try {
					in.close();
				} catch (IOException e2) {
				}
			if(out != null)
				try {
					out.close();
				} catch (IOException e2) {
				}
			
			try {
				client.close();
			} catch (IOException e2) {
			}
		}
	}

	public static void main(String[] args) {
		Thread t = new Thread(new ServerSocket());
		t.start();
	}

}

 

 

分享到:
评论

相关推荐

    socket长连接 demo

    本示例“socket长连接 demo”着重讲解了如何实现一个具备心跳机制的多客户端长连接服务,确保网络连接的稳定性和可靠性。 首先,我们来理解“心跳机制”。在长连接中,心跳机制是为了检测连接是否依然有效,避免...

    TCP长短连接简单Demo

    在这个"TCP长短连接简单Demo"中,`TCP_Connection_Server`和`TCP_Connection_Client`是主要的源代码文件。服务器端`TCP_Connection_Server`负责监听和接受客户端的连接请求,管理与多个客户端的连接,并处理接收到的...

    C语言长连接服务器Demo(epoll非阻塞)

    一个简单的C语言epoll长连接服务器Demo的流程可能如下: 1. 初始化epoll实例:调用epoll_create()创建epoll句柄。 2. 创建监听套接字:socket()、bind()、listen(),然后将监听套接字添加到epoll实例,设置为边缘...

    dwr长连接demo

    下面将详细阐述DWR长连接的工作原理、优势、配置以及如何创建一个简单的DWR长连接示例。 1. DWR长连接工作原理: DWR利用HTTP的长轮询或者Streaming模式实现长连接。在传统的HTTP请求中,客户端发起请求,服务器...

    实现android手机蓝牙连接demo

    本文将深入探讨如何实现一个简单的Android蓝牙连接Demo,涵盖蓝牙连接、数据传输以及服务(Service)的使用。 首先,我们需要在AndroidManifest.xml文件中添加必要的权限,以允许应用访问蓝牙: ```xml ``` 接...

    Android Wifi连接demo

    本文将深入探讨“Android Wi-Fi连接demo”所涉及的关键知识点,包括Wi-Fi模块的使用、接口封装、密码连接验证以及不同加密方式的处理。 1. **Android Wi-Fi API** Android系统提供了`WifiManager`类,它是处理Wi-...

    iOS下的Socket连接demo

    本文将详细解析"iOS下的Socket连接demo",并介绍相关的知识点。 首先,Socket通常被称为套接字,是应用层与传输层之间的一个抽象接口,允许应用程序通过网络发送和接收数据。它提供了进程间通信(IPC)的能力,使得...

    Delphi SQL数据库连接Demo

    本示例“Delphi SQL数据库连接Demo”聚焦于如何利用ADO(ActiveX Data Objects)技术在Delphi程序中实现对SQL数据库的连接与操作。 首先,我们需要了解什么是ADO。ADO是微软开发的一个数据访问接口,它提供了一种...

    Android下自动连接指定SSID的WIFI的简单实现的demo

    本篇将详细介绍如何在Android环境下实现这一功能,并提供一个简单的示例——"WIFIAutoConnectionDemo"。 首先,我们要了解Android中的`WifiManager`类。`WifiManager`是Android提供的用于管理WiFi连接的核心类,它...

    简单工厂模式Demo

    简单工厂模式虽然简单,但在很多场景下都非常实用,如数据库连接对象的创建、图形界面组件的实例化等。然而,需要注意的是,如果产品类型过多,或者需要动态添加新产品,简单工厂模式可能会变得难以维护,此时可以...

    ATL com连接点简单demo

    首先,我们来看"ATL com连接点简单demo"的标题,这表明这是一个简单的示例项目,展示了如何在实际编程中应用ATL COM连接点。通常,这样的示例会包含一个服务器对象(实现连接点)和一个客户端对象(连接到这些点)。...

    蓝牙连接demo

    标题“蓝牙连接demo”指的是一个演示蓝牙连接与通信的应用实例,通常在Android平台上开发,用于展示如何使用蓝牙功能实现设备间的交互。在这个demo中,我们可以理解到蓝牙技术是如何被应用到移动设备,如手机,来...

    pushlet简单demo,导入即可运行

    通过研究和运行这个demo,开发者可以学习到如何在Java环境中实现服务器推送,理解长连接的工作原理,以及如何处理轮询和非轮询的推送策略。这对于开发实时Web应用,特别是那些需要即时数据更新的场景,是非常有价值...

    nodeJS中express框架和mysql简单的连接demo

    这个“nodeJS中express框架和mysql简单的连接demo”项目,旨在演示如何将两者结合,实现在Web应用中与数据库进行交互,包括向数据库插入数据和查询数据。 首先,你需要确保已经安装了以下Node.js相关的依赖库: 1. ...

    这是一个用VS连接SQL_SERVER的一个简单demo

    【标题】:“这是一个用VS连接SQL_SERVER的一个简单demo” 在这个示例中,我们将探讨如何使用Visual Studio(VS)与Microsoft SQL Server进行交互。VS作为强大的开发环境,支持多种数据库连接,包括SQL Server。这...

    Android蓝牙,配对,搜索,连接,通信,断开的Demo

    对于经典蓝牙,连接过程相对简单,通过`BluetoothDevice.connect()`建立连接。连接成功后,会回调`onConnectionStateChange()`方法,此时可以进行数据通信。 4. **蓝牙通信** 在Android中,经典蓝牙的数据通信主要...

    Socket通讯简单Demo

    通过阅读和运行这个Demo,你可以了解如何建立Socket连接、发送和接收数据,以及如何将这些功能与用户界面相结合,实现一个简单的聊天应用。在学习过程中,深入理解TCP协议的工作原理,以及如何处理并发连接和错误...

    java连接Mysql数据库Demo

    现在,我们有一个简单的Java连接MySQL的Demo,但实际开发中,你可能需要处理异常、优化SQL语句、使用存储过程、进行事务控制等。在深入学习JDBC的同时,也要关注数据库设计和SQL优化,这将对你的开发工作大有裨益。 ...

    百度地图长按、 地图上画线连接各点的简单demo

    本文将详细解析"百度地图长按、地图上画线连接各点的简单demo"这一主题,主要关注如何实现地图上的长按事件以及如何绘制线条连接地图上的多个点。 首先,我们要理解地图长按事件。在Android开发中,通常我们使用...

    Android的socket长连接(心跳检测)

    在Android开发中,Socket长连接是一种常见的通信方式,特别是在实时性要求高的应用中,如即时通讯、在线游戏等。为了保持连接的稳定性和检测网络状况,通常会采用心跳检测机制。下面将详细介绍Android中实现Socket长...

Global site tag (gtag.js) - Google Analytics