java socket 长连接

博客分类:

  • java
socketjavathread 

最近做SSO的项目,其中用到了socket长连接.一直都是看代码的,但是要求socket做成SSL的,不得不动手写写代码了.下面我给出一个简单的socket长连接.

Java代码  
  1. SocketClient.java
Java代码  
  1. import java.io.IOException;
  2. import java.io.InputStreamReader;
  3. import java.io.OutputStreamWriter;
  4. import java.io.PrintWriter;
  5. import java.io.Reader;
  6. import java.net.Socket;
  7. import java.net.UnknownHostException;
  8. import java.nio.CharBuffer;
  9. import java.util.concurrent.ArrayBlockingQueue;
  10. import java.util.concurrent.BlockingQueue;
  11. /*{  user:jiangwh }*/
  12. public class SocketClient {
  13. public static final Object locked = new Object();
  14. public static final BlockingQueue<String> queue = new ArrayBlockingQueue<String>(
  15. 1024 * 100);
  16. class SendThread extends Thread{
  17. private Socket socket;
  18. public SendThread(Socket socket) {
  19. this.socket = socket;
  20. }
  21. @Override
  22. public void run() {
  23. while(true){
  24. try {
  25. String send = getSend();
  26. PrintWriter pw = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));
  27. pw.write(send);
  28. pw.flush();
  29. } catch (Exception e) {
  30. e.printStackTrace();
  31. }
  32. }
  33. }
  34. public String getSend() throws InterruptedException{
  35. Thread.sleep(1000);
  36. return "<SOAP-ENV:Envelope>"+System.currentTimeMillis()+"</SOAP-ENV:Envelope>";
  37. }
  38. }
  39. class ReceiveThread extends Thread{
  40. private Socket socket;
  41. public ReceiveThread(Socket socket) {
  42. this.socket = socket;
  43. }
  44. @Override
  45. public void run() {
  46. while(true){
  47. try {
  48. Reader reader = new InputStreamReader(socket.getInputStream());
  49. CharBuffer charBuffer = CharBuffer.allocate(8192);
  50. int index = -1;
  51. while((index=reader.read(charBuffer))!=-1){
  52. charBuffer.flip();
  53. System.out.println("client:"+charBuffer.toString());
  54. }
  55. } catch (Exception e) {
  56. e.printStackTrace();
  57. }
  58. }
  59. }
  60. }
  61. public void start() throws UnknownHostException, IOException{
  62. Socket socket = new Socket("10.10.148.40",18889);
  63. new SendThread(socket).start();
  64. new ReceiveThread(socket).start();
  65. }
  66. public static void main(String[] args) throws UnknownHostException, IOException {
  67. new SocketClient().start();
  68. }
  69. }
Java代码  
  1. SocketServer.java
Java代码  
  1. import java.io.IOException;
  2. import java.io.InputStreamReader;
  3. import java.io.OutputStreamWriter;
  4. import java.io.PrintWriter;
  5. import java.io.Reader;
  6. import java.io.Writer;
  7. import java.net.ServerSocket;
  8. import java.net.Socket;
  9. import java.nio.CharBuffer;
  10. import java.util.Date;
  11. /*{user:jiangwh }*/
  12. public class SocketServer {
  13. private final static String SOAP_BEGIN = "<SOAP-ENV:Envelope";
  14. private final static String SOAP_END = "</SOAP-ENV:Envelope>";
  15. public static void main(String[] args) throws IOException {
  16. SocketServer socketServer = new SocketServer();
  17. socketServer.start();
  18. }
  19. public void start() throws IOException {
  20. ServerSocket serverSocket = new ServerSocket(18889);
  21. while (true) {
  22. Socket socket = serverSocket.accept();
  23. new SocketThread(socket).start();
  24. }
  25. }
  26. class SocketThread extends Thread {
  27. private Socket socket;
  28. private String temp;
  29. public Socket getSocket() {
  30. return socket;
  31. }
  32. public void setSocket(Socket socket) {
  33. this.socket = socket;
  34. }
  35. public SocketThread(Socket socket) {
  36. this.socket = socket;
  37. }
  38. public void run() {
  39. try {
  40. Reader reader = new InputStreamReader(socket.getInputStream());
  41. Writer writer = new PrintWriter(new OutputStreamWriter(socket
  42. .getOutputStream(), "GBK"));
  43. CharBuffer charBuffer = CharBuffer.allocate(8192);
  44. int readIndex = -1;
  45. while ((readIndex = reader.read(charBuffer)) != -1) {
  46. charBuffer.flip();
  47. temp += charBuffer.toString();
  48. if (temp.indexOf(SOAP_BEGIN) != -1
  49. && temp.indexOf(SOAP_END) != -1) {
  50. // 传送一个soap报文
  51. System.out.println(new Date().toLocaleString()+"server:"+temp);
  52. temp="";
  53. writer.write("receive the soap message");
  54. writer.flush();
  55. } else if (temp.indexOf(SOAP_BEGIN) != -1) {
  56. // 包含开始,但不包含
  57. temp = temp.substring(temp.indexOf(SOAP_BEGIN));
  58. }
  59. if (temp.length() > 1024 * 16) {
  60. break;
  61. }
  62. }
  63. } catch (Exception e) {
  64. e.printStackTrace();
  65. } finally {
  66. if (socket != null) {
  67. if (!socket.isClosed()) {
  68. try {
  69. socket.close();
  70. } catch (IOException e) {
  71. e.printStackTrace();
  72. }
  73. }
  74. }
  75. }
  76. }
  77. }
  78. }

转载于:https://www.cnblogs.com/songtzu/archive/2013/02/04/2891858.html

java长连接socket【转】http://jiewo.iteye.com/blog/1562168相关推荐

  1. c语言linux TCP长连接 socket收发范例 断开自动重连

    原文链接:https://blog.csdn.net/chenhao0568/article/details/103420615 c语言linux TCP长连接 socket收发范例 断开自动重连 改 ...

  2. thrift java长连接_利用thrift在c++、java和python之间相互调用

    转自:http://blog.csdn.net/andy_yf/article/details/7487384 thrift做为跨语言调用的方案有高效,支持语言较多,成熟等优点:代码侵入较强是其弱点. ...

  3. java 长连接_Java如何实现长连接

    实现原理: 长连接的维持,是要客户端程序,定时向服务端程序,发送一个维持连接包的. 如果,长时间未发送维持连接包,服务端程序将断开连接. 客户端: Client通过持有Socket的对象,可以随时(使 ...

  4. java长连接转短连接_java原生程序redis连接(连接池/长连接和短连接)选择问题...

    原标题:java原生程序redis连接(连接池/长连接和短连接)选择问题 最近遇到的连接问题我准备从重构的几个程序(redis和mysql)长连接和短连接,以及连接池和单连接等问题用几篇博客来总结下. ...

  5. java长连接例子_java实现长连接

    (); public Client(String serverIp, int port) { this.serverIp=serverIp; this.port=port; } public void ...

  6. java长连接心跳包_socket中的短连接与长连接,心跳包示例详解

    TCP连接简介 当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接, 当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接, 连接的建立是需要三 ...

  7. Socket 短连接、长连接_YTmarkit的空间_百度空间

    Socket 短连接.长连接_YTmarkit的空间_百度空间 Socket 短连接.长连接_YTmarkit的空间_百度空间 Socket 短连接.长连接 socket Socket协议的形象描述 ...

  8. java hessian rmi_RMI,socket,rpc,hessian,http比较

    SOCKET使用时可以指定协议TCP,UDP等: RIM使用JRMP协议,JRMP又是基于TCP/IP: RPC底层使用SOCKET接口,定义了一套远程调用方法: HTTP是建立在TCP上,不是使用S ...

  9. JAVA网络编程Socket常见问题 【长连接专题】

    一. 网络程序运行过程中的常见异常及处理 第1个异常是 java.net.BindException:Address already in use: JVM_Bind. 该异常发生在服务器端进行new ...

最新文章

  1. tensorflow对应的python版本清单
  2. Bloom Filter 大规模数据处理利器
  3. 051_Unicode字符官方标准二
  4. 使用JProfiler查看GC Roots
  5. 分布式一致性协议Raft原理与实例
  6. MyEclipse6.5与Perforce的集成
  7. 您需要了解的有关默认方法的所有信息
  8. 【计算机网络复习 物理层】2.1.1 物理层基本概念
  9. python多线程没有java_Java 多线程启动为什么调用 start() 方法而不是 run() 方法?...
  10. tornado+websocket+mongodb实现在线视屏文字聊天
  11. 计算机2010ppt试题,计算机Office2010 PPT试题.doc
  12. 二、三角高程测量计算(C#语言)
  13. easyui datagrid deleteRow(删除行)的BUG
  14. 计算机的键盘有什么意思啊,键盘是什么意思 不是电脑的键盘
  15. STM32: startup_**.s、Core_cm3.c、宏定义、HAL库
  16. 关于Windows Server 2012 网络发现启动不了
  17. python二元函数如何编写,Nelder_Mead算法的简介和用作求解二维函数最小值的Python实现...
  18. 杨子恒温烘鞋机 W-7 拆解
  19. K线形态识别_双飞乌鸦
  20. FAST_LIO_SAM 融入后端优化的FASTLIO SLAM 系统 前端:FAST_LIO2 后端:LIO_SAM

热门文章

  1. No execution.target specified in your configuration file.
  2. MySQL my.cnf file - Found option without preceding group
  3. ubuntu下面的robo3t 使用笔记
  4. 大话数据结构:散列表
  5. 数据结构与算法:树与二叉树python实现
  6. 5.6 稳健最小二乘法
  7. ALSA(二), makefile, Autotools, premake
  8. JEPaas代码_((表单)_输入字段值而改变值)
  9. 摩托车计算机辅助设计,摩托车消声器消声特性及计算机辅助设计研究
  10. 鼠标形状 - - -放大镜 五指小手