关闭

java socket长连接服务端

标签: 长连接服务端socket消息客户端
1909人阅读 评论(0) 收藏 举报
分类:
java socket长连接服务端的实现

网络编程都是最底层都是基于socket的,鉴于客户端需要一直发送消息,使用短连接就不适合了,因为建立socket连接后发送完数据又马上断开连接。而长连接通过客户端的心跳机制一直保持连接,不管当前是否接收和发送数据。长连接服务端代码如下:

package com.starit.ipran.socket;


import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


import com.starit.ipran.kafka.KafkaUtils;
import com.starit.ipran.load.Constants;
import com.starit.ipran.model.IpranAlarm;
import com.starit.ipran.util.EncodeUtils;


public class SocketServer {
	
	private final static Logger LOGGER = LoggerFactory.getLogger(SocketServer.class);
	   
    public void startAction(){  
        ServerSocket serverSocket=null;  
        try {  
            serverSocket=new ServerSocket(Constants.SOCKET_PORT);  //端口号
            LOGGER.info("服务端服务启动监听:");
            //通过死循环开启长连接,开启线程去处理消息
            while(true){  
                Socket socket=serverSocket.accept();  
                new Thread(new MyRuns(socket)).start();  
            }  
        } catch (Exception e) {  
            e.printStackTrace();  
        } finally {  
            try {  
                if (serverSocket!=null) {  
                    serverSocket.close();  
                }  
            } catch (Exception e2) {  
                e2.printStackTrace();  
            }  
        }  
    }  
      
    class MyRuns implements Runnable{
          
        Socket socket;  
        BufferedReader reader;  
        BufferedWriter writer;  
  
        public MyRuns(Socket socket) {  
            super();  
            this.socket = socket;  
        }  
  
        public void run() {  
            try {  
                reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));//读取客户端消息  
                writer=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));//向客户端写消息
                String lineString="";  
               
                while(!(lineString=reader.readLine()).equals("bye")){
                	LOGGER.info("收到来自客户端的发送的消息是:" + lineString);
                    writer.write("服务器返回:"+lineString+"\n");  
                    writer.flush();  
                }  
            } catch (Exception e) {  
                e.printStackTrace();  
            } finally {  
                try {  
                    if (reader!=null) {  
                        reader.close();  
                    }  
                    if (writer!=null) {  
                        writer.close();  
                    }  
                    if (socket!=null) {  
                        socket.close();  
                    }  
                } catch (Exception e2) {  
                    e2.printStackTrace();  
                }  
            }  
        }  
          
    }  
}


下面是客户端程序:
package www.socket.test;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;

public class Client {
	public static void main(String[] args) {  
		Client client=new Client();  
		client.startAction();  
    }  
      
    void readSocketInfo(BufferedReader reader){  
        new Thread(new MyRuns(reader)).start();  
    }  
      
    class MyRuns implements Runnable{  
          
        BufferedReader reader;  
          
        public MyRuns(BufferedReader reader) {  
            super();  
            this.reader = reader;  
        }  
  
        public void run() {  
            try {  
                String lineString="";  
                while( (lineString = reader.readLine())!=null ){  
                    System.out.println(lineString);  
                }  
            } catch (Exception e) {  
                e.printStackTrace();  
            }  
        }  
          
    }  
      
    public void startAction(){  
        Socket socket=null;  
        BufferedReader reader=null;  
        BufferedWriter writer=null;  
        BufferedReader reader2=null;  
        try {  
            socket=new Socket("127.0.0.1", 10000);  
            reader = new BufferedReader(new InputStreamReader(System.in));  
            reader2=new BufferedReader(new InputStreamReader(socket.getInputStream()));  
            writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));  
            readSocketInfo(reader2);  
            String lineString="";  
            while(!(lineString=reader.readLine()).equals("exit")){  
                writer.write(lineString+"\n");  
                writer.flush();  
            }  
        } catch (Exception e) {  
            e.printStackTrace();  
        } finally {  
            try {  
                if (reader!=null) {  
                    reader.close();  
                }  
                if (writer!=null) {  
                    writer.close();  
                }  
                if (socket!=null) {  
                    socket.close();  
                }  
            } catch (Exception e2) {  
                e2.printStackTrace();  
            }  
        }  
    }  
}




1
0
查看评论

java socket 长连接事例

我们知道java的socket是基于TCP的连接,而ServerSocket 的accept()方法是阻塞的,直到有客户端连接到服务器端,我们常用多线程的方式来实现服务器端响应多个客户端,以下是代码:
  • ljl157011
  • ljl157011
  • 2014-02-16 19:12
  • 13545

Java写的保持socket长连接客户端代码

public class Client { static Socket socket = null; static OutputStream os = null; static InputStream is = null; public static void main...
  • u013316901
  • u013316901
  • 2017-10-12 15:09
  • 845

Java socket长连接代码实现

服务器端程序: import java.io.*; import java.net.*; import java.util.*; public class ChatServer { boolean started = false; ServerSocket ss = null; List ...
  • huangbin10025
  • huangbin10025
  • 2014-09-30 15:42
  • 4289

java socket保持长连接

ServerSocket serverSocket=new ServerSocket(1111); Socket socket=serverSocket.accept(); while(true){//保持长连接 try { Thread.sleep(100);//等待时间...
  • mydreamongo
  • mydreamongo
  • 2012-11-17 17:32
  • 34171

Java实现Socket长连接和短连接

  • 2014-09-21 11:32
  • 639KB
  • 下载

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

简单解释就是: 短连接:建立连接,发送数据包,关闭连接 长连接:建立连接,发送数据包,发送心跳包,发送数据包,发送心跳包,发送心跳包。。。。。。 所以又频繁的数据收发的话,短连接会频繁创建TCP连接,而对于长连接,则始终用的是同一个TCP连接 [java] vie...
  • qq_33101675
  • qq_33101675
  • 2017-07-13 22:06
  • 451

Java实现Socket长连接和短连接.

  • 2017-11-17 17:11
  • 3KB
  • 下载

Java Socket收发异步长连接

最近做SSO的项目,其中用到了socket长连接.一直都是看代码的,但是要求socket做成SSL的,不得不动手写写代码了.下面我给出一个简单的socket长连接. Java代码 SocketClient.java  SocketClient.jav...
  • liuzesoft
  • liuzesoft
  • 2014-06-12 14:33
  • 18960

Java的socket长连接实例

  • 2011-10-11 14:21
  • 2KB
  • 下载

Java Socket长连接实现

TestScoket.java 单例模式实现,继承Socket 1 public class TestSocket 2 extends Socket { 3 4 private static TestSocket instance; 5 ...
  • yangwei19680827
  • yangwei19680827
  • 2013-07-10 15:38
  • 2379
    个人资料
    • 访问:55372次
    • 积分:1209
    • 等级:
    • 排名:千里之外
    • 原创:65篇
    • 转载:0篇
    • 译文:0篇
    • 评论:12条
    贵州中测信息技术有限公司
    友情链接
    最新评论