简单解释就是:

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

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

。。。。。

所以又频繁的数据收发的话。短连接会频繁创建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("读取到client发送的来数据:"+data);
out.write("这是服务端发给client的数据:".getBytes());
out.write(recData);
}else {
System.out.println("数据读取完成。");
s.close();
System.exit(0);
//ss.close();
}
}
} catch (IOException e) {
e.printStackTrace();
}
} }

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2ltb25jaGk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

以上这样的服务端读数据是堵塞式。假设client没有数据写过来。服务端就会一直堵塞在那不动

client开启一个telnet就可以測试服务端的socket程序了,当然你也能够自己写一个socketclient,例如以下:

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新建连接了。

accept()等待连接,该方法堵塞当前线程直到建立连接为止

以上服务端的网络程序仅仅能和一个client程序连接,拒绝多个client的连接。

我们能够通过线程来解决问题:每当程序建立一个新的套接字连接。也就是调用accept方法时。将启动一个新的线程来处理server和client的连接。而主程序将马上返回并等待下一个连接。

详细内容请见:http://blog.csdn.net/simonchi/article/details/40785441

Socket 长连接 短连接 心跳 JAVA SOCKET编程的更多相关文章

  1. 长连接 短连接 RST报文

    https://baike.baidu.com/item/短连接 短连接(short connnection)是相对于长连接而言的概念,指的是在数据传送过程中,只在需要发送数据时,才去建立一个连接,数 ...

  2. nginx 代理tcp长连接短连接配置

    https://blog.csdn.net/tayinyinyueyue/article/details/78932697 nginx使用ngx_stream_core_module模块代理tcp长连 ...

  3. [Golang] 从零開始写Socket Server(3): 对长、短连接的处理策略(模拟心跳)

    通过前两章,我们成功是写出了一套凑合能用的Server和Client,并在二者之间实现了通过协议交流.这么一来,一个简易的socket通讯框架已经初具雏形了,那么我们接下来做的.就是想办法让这个框架更 ...

  4. java socket 长连接 短连接

    长连接 是一旦一个客户端登陆上服务器,其与服务器之间的连接就不关闭,不管他们之间进行了多少次交易,直到客户端退出登陆或网络出现故障.这种技术在联机交易系统实现有利于提高效率. 短连接是客户端每发一个请 ...

  5. Socket 接收本地短连接并转发为长连接 多线程

    import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io. ...

  6. Linux C++ Socket 高并发短连接 TIME_WAIT 挥之不去解决方法

    近期遇到一个项目 需要在Linux上建立一个Socket 进行 HTTP_GET , 需要线程高并发的 使用TCP Socket 进行Send 发送HTTP_GET请求到 指定网站 . 而且不需要re ...

  7. HTTP长连接短连接

    一.什么是长连接 HTTP1.1规定了默认保持长连接(HTTP persistent connection ,也有翻译为持久连接),数据传输完成了保持TCP连接不断开(不发RST包.不四次握手),等待 ...

  8. MySQL 线程池&连接池&长连接&短连接

    线程池 简介 1.mysql每连接每线程,mysql都分配一个单独的线程,该线程处理客户端发来的所有命令 2.每个线程会占用一定的系统资源,线程数越多消耗的系统资源也越多 3.线程的创建和销毁有一定的 ...

  9. [PHP] time_wait与长连接短连接

    服务端上查看tcp连接的建立情况,直接使用netstat命令来统计,看到了很多的time_wait状态的连接.这些状态是tcp连接中主动关闭的一方会出现的状态.该服务器是nginx的webserver ...

随机推荐

  1. Python中*args和**kwargs的使用

    函数定义 使用*args和**kwargs传递可变长参数: *args用作传递非命名键值可变长参数列表(比如元组) **kwargs用作传递键值可变长参数列表(比如字典) 函数入参 *args 传递一 ...

  2. Angular——单页面与路由的使用

    单页面 SPA(Single Page Application)指的是通单一页面展示所有功能,通过Ajax动态获取数据然后进行实时渲染,结合CSS3动画模仿原生App交互,然后再进行打包(使用工具把W ...

  3. Vue指令6:v-show

    根据表达式的真假值来渲染元素 用法大致一样: <h1 v-show="ok">Hello!</h1> 不同的是带有 v-show 的元素始终会被渲染并保留在 ...

  4. CAD把当前图形保为一个jpg文件(com接口Delphi语言)

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 procedure TForm2.Button1Click(Sender: TObje ...

  5. Redis系列(六)--为什么这么快?

    Redis作为一个基于key-value的NoSQL数据库,最显著的特点存取速度非常快,官方说可以达到10W OPS,但是Redis为何这么快? 1.开发语言 Redis使用C语言进行编写的,而Uni ...

  6. Jquery 上一步、下一步及提交

    111 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <tit ...

  7. 数据结构与算法(3)- C++ STL与java se中的vector

    声明:虽然本系列博客与具体的编程语言无关.但是本文作者对c++相对比较熟悉,其次是java,所以难免会有视角上的偏差.举例也大多是和这两门语言相关. 上一篇博客概念性的介绍了vector,我们有了大致 ...

  8. springboot+idea+jsp 404问题

    我是这么解决的 对于单一项目,加入以下jar包即可. <!--前台页面的支持--> <dependency> <groupId>javax.servlet</ ...

  9. TestNG多线程测试-用xml文件实现

    MultiThreadOnXml类: package com.janson.multiThread; import org.testng.annotations.Test; public class ...

  10. springcloud(八):熔断器Hystrix

    熔断器 雪崩效应 在微服务架构中通常会有多个服务层调用,基础服务的故障可能会导致级联故障,进而造成整个系统不可用的情况,这种现象被称为服务雪崩效应.服务雪崩效应是一种因“服务提供者”的不可用导致“服务 ...