文档章节

JAVA TCP 长连接通信

A
 ActionTime
发布于 2017/04/07 14:19
字数 326
阅读 184
收藏 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
杭州
私信 提问

暂无文章

Spring源码学习笔记-1-Resource

打算补下基础,学习下Spring源码,参考书籍是《Spring源码深度解析》,使用版本是Spring 3.2.x,本来想试图用脑图记录的,发现代码部分不好贴,还是作罢,这里只大略记录下想法,不写太细了 ...

zypy333
15分钟前
0
0
RestClientUtil和ConfigRestClientUtil区别说明

RestClientUtil directly executes the DSL defined in the code. ConfigRestClientUtil gets the DSL defined in the configuration file by the DSL name and executes it. RestClientUtil......

bboss
今天
14
0

中国龙-扬科
昨天
2
0
Linux系统设置全局的默认网络代理

更改全局配置文件/etc/profile all_proxy="all_proxy=socks://rahowviahva.ml:80/"ftp_proxy="ftp_proxy=http://rahowviahva.ml:80/"http_proxy="http_proxy=http://rahowviahva.ml:80/"......

临江仙卜算子
昨天
9
0
java框架学习日志-6(bean作用域和自动装配)

本章补充bean的作用域和自动装配 bean作用域 之前提到可以用scope来设置单例模式 <bean id="type" class="cn.dota2.tpye.Type" scope="singleton"></bean> 除此之外还有几种用法 singleton:......

白话
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部