码迷,mamicode.com
首页 > 编程语言 > 详细

Socket 长连接 短连接 心跳 JAVA SOCKET编程

时间:2014-10-31 10:09:59      阅读:251      评论:0      收藏:0      [点我收藏+]

标签:blog   http   io   os   ar   使用   java   数据   on   

简单解释就是:

短连接:建立连接,发送数据包,关闭连接

长连接:建立连接,发送数据包,发送心跳包,发送数据包,发送心跳包,发送心跳包。。。。。。


所以又频繁的数据收发的话,短连接会频繁创建TCP连接,而对于长连接,则始终用的是同一个TCP连接


package com.tree.demo.socket;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class ServerSocketDemo {

	private static final int PORT = 1234;
	
	private static final int BUFFER_SIZE = 1024;
	
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try {
			ServerSocket ss = new ServerSocket(PORT);
			Socket s = ss.accept();
			System.out.println("这是服务端,监听本机"+PORT+"端口");
			byte[] recData = null;
			InputStream in = s.getInputStream();
			OutputStream out = s.getOutputStream();
			while(true) {
				recData = new byte[BUFFER_SIZE];
				int r = in.read(recData);
				//int r = in.read(recData);
				if(r>-1) {
					String data = new String(recData);
					if(data.trim().equals("over")) {
						s.close();
					}
					System.out.println("读取到客户端发送的来数据:"+data);
					out.write("这是服务端发给客户端的数据:".getBytes());
					out.write(recData);
				}else {
					System.out.println("数据读取完毕!");
					s.close();
					System.exit(0);
					//ss.close();
				}
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}
bubuko.com,布布扣

以上这种服务端读数据是阻塞式,如果客户端没有数据写过来,服务端就会一直阻塞在那不动

客户端开启一个telnet即可测试服务端的socket程序了,当然你也可以自己写一个socket客户端,如下:

package socket;

import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

public class ClientSocketDemo {

	private static final String HOST = "192.168.8.14";

	private static final int PORT = 1234;

	public static void main(String[] args) throws UnknownHostException,
			IOException {
		Socket client = new Socket(HOST, PORT);
		OutputStream out = client.getOutputStream();
		try {
			while (true) {
				Thread.sleep(1000);
				System.out.println("发送心跳数据包");
				out.write("send heart beat data package !".getBytes());
			}
		} catch (Exception e) {
			e.printStackTrace();
			out.close();
			client.close();
		}
	}

}
同时这要是一个心跳的实例,心跳只要不出现异常的情况下,可以直接使用client连接发送数据包,不需要new socket新建连接了。



Socket 长连接 短连接 心跳 JAVA SOCKET编程

标签:blog   http   io   os   ar   使用   java   数据   on   

原文地址:http://blog.csdn.net/simonchi/article/details/40613923

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!