(java)socket全双工长连接通信实例
(借鉴备忘)直接上代码:
client:
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.Reader;
import java.net.Socket;
import java.nio.CharBuffer;public class TestSocketClient {public static void main(String[] args) {// TODO Auto-generated method stubnew TestSocketClient().start();}class SendThread extends Thread{private Socket socket;public SendThread(Socket socket){this.socket=socket;}@Overridepublic void run(){while(true){try{Thread.sleep(1000); String send="<SOAP-ENV:Envelope>"+System.currentTimeMillis()+"</SOAP-ENV:Envelope>";PrintWriter pw=new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));pw.write(send);pw.flush();}catch(Exception e){e.printStackTrace();}}}}class ReceiveThread extends Thread{private Socket socket;public ReceiveThread(Socket socket){this.socket=socket;}@Overridepublic void run(){while(true){try{Reader reader=new InputStreamReader(socket.getInputStream());CharBuffer charbuffer=CharBuffer.allocate(8192);int index=-1;while((index=reader.read(charbuffer))!=-1){charbuffer.flip();//设置从0到刚刚读取到的位置System.out.println("client:"+charbuffer.toString());}}catch(Exception e){e.printStackTrace();}}}}public void start(){try{Socket socket=new Socket("127.0.0.1",18889);new SendThread(socket).start();new ReceiveThread(socket).start();}catch(Exception e){e.printStackTrace();}}
}
server:
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.Reader;
import java.io.Writer;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.CharBuffer;
import java.util.Date;public class TestSocketServer {private final static String SOAP_BEGIN = "<SOAP-ENV:Envelope"; private final static String SOAP_END = "</SOAP-ENV:Envelope>"; public static void main(String[] args) {// TODO Auto-generated method stubTestSocketServer testserver=new TestSocketServer();testserver.start();}public void start(){try{ServerSocket serversocket=new ServerSocket(18889);while(true){Socket socket=serversocket.accept();new SocketThread(socket).start();}}catch(Exception e){e.printStackTrace();}}class SocketThread extends Thread{private Socket socket;private String temp;public SocketThread(Socket socket){this.socket=socket;}public Socket getsocket(){return this.socket;}public void setsocjet(Socket socket){this.socket=socket;}@Overridepublic void run(){try{Reader reader=new InputStreamReader(socket.getInputStream());Writer writer=new PrintWriter(new OutputStreamWriter(socket.getOutputStream(),"GBK"));CharBuffer charbuffer=CharBuffer.allocate(8192);int readindex=-1;while((readindex=reader.read(charbuffer))!=-1){charbuffer.flip();temp+=charbuffer.toString();if(temp.indexOf(SOAP_BEGIN)!=-1 && temp.indexOf(SOAP_END)!=-1){//System.out.println(new Date().toLocaleString()+"server:"+temp);temp="";writer.write("receive the soap message hahahah");writer.flush();}else if(temp.indexOf(SOAP_BEGIN)!=-1){temp=temp.substring(temp.indexOf(SOAP_BEGIN));}if(temp.length()>1024*16){break;}}}catch(Exception e){e.printStackTrace();}finally{if(socket!=null){try{if(!socket.isClosed()){socket.close();}}catch(Exception e){e.printStackTrace();}}}}}}
(java)socket全双工长连接通信实例相关推荐
- java socket建立长连接_Java Web项目中使用Socket通信多线程、长连接的方法
很多时候在javaweb项目中我们需要用到Socket通信来实现功能,在web中使用Socket我们需要建立一个监听程序,在程序启动时,启动socket监听.我们的应用场景是在java项目中,需要外接 ...
- Netty 通过 WebSocket 编程实现服务器和客户端全双工长连接<2021SC@SDUSC>
2021SC@SDUSC Netty 通过 WebSocket 编程实现服务器和客户端全双工长连接 实例要求: Http 协议是无状态的, 浏览器和服务器间的请求响应一次,下一次会重新创建连接. 要求 ...
- 微信 短连接 长连接服务器,Socket,http长连接与短连接
TCP/IP TCP/IP是个协议组,可分为三个层次:网络层,传输层和应用层. 在网络层有IP协议,ICMP协议,ARP协议,RARP协议和BOOTP协议. 在传输层中有:TCP协议与UDP协议. 在 ...
- Android开发:长连接通信设计与实现
一.前言 Android长连接应用于服务器需要主动通知客户端的一些场景,例如推送消息和即时通讯.除了接入第三方SDK来实现外,在业务要求不是很高的情况下,完全可以自己编写一套实现方案. 二.正文 An ...
- java如何实现Socket的长连接和短连接
讨论Socket必讨论长连接和短连接 一.长连接和短连接的概念 1.长连接与短连接的概念:前者是整个通讯过程,客户端和服务端只用一个Socket对象,长期保持Socket的连接:后者是每次请求,都新建 ...
- Java Socket 全双工通信
最初在认识上有这样的误区,认为只有在 netty,nio 这样的多路复用 IO 模型时,读写才不会相互阻塞,才可以实现高效的双向通信,但实际上,Java Socket 是全双工的:在任意时刻,线路上存 ...
- android socket 长连接_TCP/IP,http,socket,长连接,短连接
点击上方蓝色字体,选择"标星公众号" 优质文章,第一时间送达 上一篇:这300G的Java资料是我师傅当年给我的,免费分享给大家 下一篇:这200G的Java实战资料是我师傅当年教 ...
- http和socket之长连接和短连接区别
TCP/IP TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层. 在网络层有IP协议.ICMP协议.ARP协议.RARP协议和BOOTP协议. 在传输层中有TCP协议与UDP协议. ...
- socket解读,http和socket之长连接和短连接区别!
TCP/IP TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层. 在网络层有IP协议.ICMP协议.ARP协议.RARP协议和BOOTP协议. 在传输层中有TCP协议与UDP协议. ...
最新文章
- 模拟退火 HDU - 2899 Strange Function
- 经典的《JavaScript 权威指南》中的“对象”不经典
- Linux 文件夹含义(转)
- 原码的一位乘法和补码的一位乘法对比
- Java实现根据地理位置获取经纬度
- XML Schema 基本结构
- 入门干货之用DVG打造你的项目主页-Docfx、Vs、Github
- .NET 的 WCF 和 WebService 有什么区别?(转载)
- unity案例 mysql lua_通过Xlua实现unity热更新的一个小例子
- 五、扩展Orchard(五) Writing a Content Part
- java jar 启动项目,SpringBoot项目运行jar包启动的步骤流程解析
- 吊打面试官!Redis 常见面试题请收好 | 原力计划
- 没有配置默认路由_网络路由选择原理
- javascript 对象(四)
- php返回中文是 u,php json_encode总是返回unicode字符 u.问题 解决
- 吉米多维奇数学分析习题集学习指引
- Gradle下载及安装,配置IDEA
- deepfacelab安卓版_DeepFaceLab2020版本下载
- 贴吧怎么引流_教您如何快速搭建自己的引流池-万能的小胡
- 【听说隔壁老王开始学编程了?】