文档章节

JAVA TCP 长连接通信

A
 ActionTime
发布于 2017/04/07 14:19
字数 326
阅读 3.3K
收藏 0

由于TCP通信短连接在一次读写操作后关闭链接

而建立链接需要3次握手,而释放时需要4次握手

在一个客户端与服务器频繁通信时采用短连接是非常消耗资源和消耗时间的 

更多参考http://www.cnblogs.com/beifei/archive/2011/06/26/2090611.html

所以此时采用长连接比较合理,以下是亲自测试过的TCP长连接

 

Client代码:

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

public class TCPClientTest {

	private static final int SERVER_PORT=2010;
	
	public static void main(String[] args) throws Exception {
		   Socket socket = new Socket("127.0.0.1", SERVER_PORT);
		   System.out.println("Connected to server...sending command string");
		   OutputStream out = socket.getOutputStream();
		   int i = 0;
		   while (i < 10) {
		   out.write(("test" + i).getBytes());  // 发送
		   	out.flush();
		   	Thread.sleep(1000);
		   	i++;
		   }
		   out.close();
		   socket.close();
	}
}

Server代码:

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Hashtable;

public class TCPTransport {
	
    private static final int SERVER_PORT=2010;
 
    private static   Hashtable<String, Socket> ht = new Hashtable();
    
    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        System.out.println("VNTCenter.main()===TCP SERVER==============");
        ServerSocket vntServer = null;
        try{
            vntServer= new ServerSocket(SERVER_PORT);

            System.out.println("Listening Port is "+vntServer.getLocalPort()+"...");
            while(true){
                Socket vntClient=vntServer.accept();
                System.out.println("have a client entering , the IP is "+vntClient.getInetAddress()+"...");
                System.out.println("have a client entering , the Port is "+vntClient.getPort()+"...");
                new GetGpsThreadFun(vntClient).start();
                ht.put(vntClient.getInetAddress().toString(),vntClient);
            }
        }catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
            vntServer.close();
        }
    }
}

class GetGpsThreadFun extends Thread{
    private Socket vntThreadClient;

    public GetGpsThreadFun(Socket vntThreadSocket){
        vntThreadClient=vntThreadSocket;
    }
    public void run(){
        try{
        	byte[] data = new byte[128];
            while(true){
            	int len = vntThreadClient.getInputStream().read(data);
            	if (len > 0){
            		System.out.println(vntThreadClient.getInetAddress()+":"+vntThreadClient.getPort()+":"+new String(data,0,len));
                  if("shutdown".equals(vntThreadClient)){
                      break;
                  }
            	}
            }
        }catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
    }

}

© 著作权归作者所有

A
粉丝 0
博文 5
码字总数 1333
作品 0
杭州
私信 提问
加载中

评论(0)

暂无文章

QEMU、KVM、libvirt三者间的关系

QEMU QEMU提供了一个开源的服务器全虚拟化解决方案,它可以使你在特定平台的物理机上模拟出其它平台的处理器,比如在X86 CPU上虚拟出Power的CPU,此时的Guest OS感觉不到虚拟机的存在,就像运行在...

osc_7ludm6s2
16分钟前
9
0
QEMU和KVM的关系

KVM是指在CPU硬件支持基础之上的虚拟化技术。没有CPU硬件虚拟化的支持,KVM是无法工作的。 准确来说,KVM是Linux的一个模块。可以用modprobe去加载KVM模块。加载了模块后(kvm和kvm-intel模块...

osc_3ytpwpyb
17分钟前
9
0
thymeleaf语法(二)

<span th:if="$(user.age) eq 23"></span> 运算符: gt  :great than  (大于)  > ge  :great equal  (大于等于)  >= eq  :equal  (等于)  = lt  :less than  (小于) ......

osc_nt0jrqne
19分钟前
7
0
送给发烧友:Python条件语句的七种写法T

有的人说 Python 入门容易,但是精通难的语言,这点我非常赞同。Python 语言里有许多(而且是越来越多)的高级特性,是 Python 发烧友们非常喜欢的。在这些人的眼里,能够写出那些一般开发者...

osc_0kdyznad
20分钟前
11
0
人物-企业家:车建新

ylbtech-人物-企业家:车建新 车建新 ,男,1966年6月18日生于江苏省常州市,红星美凯龙家居集团股份有限公司(Red Star Macalline Group Corporation Ltd.)董事长兼CEO,并担任全国工商联执...

osc_z2ru77w0
21分钟前
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部