国内最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2
您当前位置:首页 > 互联网 > Socket 长连接 短连接 心跳 JAVA SOCKET编程

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

来源:程序员人生   发布时间:2014-11-28 08:50:27 阅读次数:5008次

简单解释就是:

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

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


所以又频繁的数据收发的话,短连接会频繁创建TCP连接,而对长连接,则始终用的是同1个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>⑴) { 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(); } } }

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

客户端开启1个telnet便可测试服务真个socket程序了,固然你也能够自己写1个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(); } } }
同时这要是1个心跳的实例,心跳只要不出现异常的情况下,可以直接使用client连接发送数据包,不需要new socket新建连接了。



生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------
关闭
程序员人生