- 浏览: 1068061 次
- 性别:
- 来自: 长沙
文章分类
- 全部博客 (639)
- 服务器配置篇 (58)
- hibernate篇 (14)
- spring篇 (33)
- struts篇 (28)
- JS篇 (46)
- 其他技术篇 (46)
- 数据库集群配置 (6)
- JAVA基础相关 (48)
- 分布式框架HadHoop的应用 (2)
- FLEX篇 (8)
- SQLSERVER技术 (32)
- Android学习 (13)
- amchart学习笔记 (1)
- openfire+smark搭建即时通讯 (9)
- Linux学习 (18)
- Oracle数据库 (15)
- 网站优化技术 (12)
- mysql数据库 (2)
- 项目学习总结 (18)
- 工具类(JAVA) (12)
- 工具类(JS) (2)
- 设计模式 (10)
- Lucene学习 (24)
- EJB3学习 (6)
- Sphinx搜索引擎 (3)
- 工作中用到的软件小工具 (5)
- .NET (49)
- JAVA 连接SQLSERVER2008步骤 (1)
- MongoDB (19)
- Android手机开发 (3)
- Maven (6)
- vue (9)
- Shiro (4)
- mybatis (3)
- netty框架 (1)
- SpringCloud (3)
- spring-cloud (7)
- Git (1)
- dubbo (2)
- springboot (13)
- rocketmq (1)
- git学习 (2)
- kafka服务器 (2)
- linux (10)
- WEB系统辅助项目 (1)
- jenkins (2)
- docker (4)
- influxdb (3)
- python (2)
- nginx (1)
最新评论
-
jiangfuofu555:
这样数据量大,效率怎么样?
sqlserver 实现分页的前台代码 以及后台的sqlserver语句 -
w156445045:
博主请问下,如何做到实时的刷新呢,
另外我后台是Java 谢谢 ...
web 版本的汽车仪表盘,非常好看。还有各种图形 -
jackyin5918:
<transportConnector name=&qu ...
ActiveMQ的activemq.xml详细配置讲解 -
握着橄榄枝的人:
你这个不是spring1.x的吧
spring1.x使用AOP实例 -
xiaophai:
全乱套了!
openfire+spark搭建完美的及时通讯
转载:http://blog.csdn.net/kongxx/article/details/7259834
上一篇文章说到了用Java Socket来传输对象,但是在有些情况下比如网络环境不好或者对象比较大的情况下需要把数据对象进行压缩然后在传输,此时就需要压缩这些对象流,此时就可以GZIPInputStream和GZIPOutputStream来处理一下socket的InputStream和OutputStream。
仍然需要一个实现了java.io.Serializable接口的简单Java对象
- package com.googlecode.garbagecan.test.socket.sample4;
- public class User implements java.io.Serializable {
- private static final long serialVersionUID = 1L;
- private String name;
- private String password;
- public User() {
- }
- public User(String name, String password) {
- this.name = name;
- this.password = password;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public String getPassword() {
- return password;
- }
- public void setPassword(String password) {
- this.password = password;
- }
- }
在Server端使用,socket的InputStream首先被包装成GZIPInputStream,然后又被包装成ObjectInputStream,而socket的OutputStream首先被包装成GZIPOutputStream,然后又被包装成ObjectOutputStream,如下:
- package com.googlecode.garbagecan.test.socket.sample4;
- import java.io.IOException;
- import java.io.ObjectInputStream;
- import java.io.ObjectOutputStream;
- import java.net.ServerSocket;
- import java.net.Socket;
- import java.util.logging.Level;
- import java.util.logging.Logger;
- import java.util.zip.GZIPInputStream;
- import java.util.zip.GZIPOutputStream;
- public class MyServer {
- private final static Logger logger = Logger.getLogger(MyServer.class.getName());
- public static void main(String[] args) throws IOException {
- ServerSocket server = new ServerSocket(10000);
- while (true) {
- Socket socket = server.accept();
- socket.setSoTimeout(10 * 1000);
- invoke(socket);
- }
- }
- private static void invoke(final Socket socket) throws IOException {
- new Thread(new Runnable() {
- public void run() {
- GZIPInputStream gzipis = null;
- ObjectInputStream ois = null;
- GZIPOutputStream gzipos = null;
- ObjectOutputStream oos = null;
- try {
- gzipis = new GZIPInputStream(socket.getInputStream());
- ois = new ObjectInputStream(gzipis);
- gzipos = new GZIPOutputStream(socket.getOutputStream());
- oos = new ObjectOutputStream(gzipos);
- Object obj = ois.readObject();
- User user = (User)obj;
- System.out.println("user: " + user.getName() + "/" + user.getPassword());
- user.setName(user.getName() + "_new");
- user.setPassword(user.getPassword() + "_new");
- oos.writeObject(user);
- oos.flush();
- gzipos.finish();
- } catch (IOException ex) {
- logger.log(Level.SEVERE, null, ex);
- } catch(ClassNotFoundException ex) {
- logger.log(Level.SEVERE, null, ex);
- } finally {
- try {
- ois.close();
- } catch(Exception ex) {}
- try {
- oos.close();
- } catch(Exception ex) {}
- try {
- socket.close();
- } catch(Exception ex) {}
- }
- }
- }).start();
- }
- }
Client也和Server端类似,同样要不socket的XXXStream包装成GZIPXXXStream,然后再包装成ObjectXXXStream,如下:
- package com.googlecode.garbagecan.test.socket.sample4;
- import java.io.IOException;
- import java.io.ObjectInputStream;
- import java.io.ObjectOutputStream;
- import java.net.InetSocketAddress;
- import java.net.Socket;
- import java.net.SocketAddress;
- import java.util.logging.Level;
- import java.util.logging.Logger;
- import java.util.zip.GZIPInputStream;
- import java.util.zip.GZIPOutputStream;
- public class MyClient {
- private final static Logger logger = Logger.getLogger(MyClient.class.getName());
- public static void main(String[] args) throws Exception {
- for (int i = 0; i < 10; i++) {
- Socket socket = null;
- GZIPOutputStream gzipos = null;
- ObjectOutputStream oos = null;
- GZIPInputStream gzipis = null;
- ObjectInputStream ois = null;
- try {
- socket = new Socket();
- SocketAddress socketAddress = new InetSocketAddress("localhost", 10000);
- socket.connect(socketAddress, 10 * 1000);
- socket.setSoTimeout(10 * 1000);
- gzipos = new GZIPOutputStream(socket.getOutputStream());
- oos = new ObjectOutputStream(gzipos);
- User user = new User("user_" + i, "password_" + i);
- oos.writeObject(user);
- oos.flush();
- gzipos.finish();
- gzipis = new GZIPInputStream(socket.getInputStream());
- ois = new ObjectInputStream(gzipis);
- Object obj = ois.readObject();
- if (obj != null) {
- user = (User)obj;
- System.out.println("user: " + user.getName() + "/" + user.getPassword());
- }
- } catch(IOException ex) {
- logger.log(Level.SEVERE, null, ex);
- }
- try {
- oos.close();
- } catch (IOException e) {
- }
- try {
- ois.close();
- } catch (IOException e) {
- }
- try {
- socket.close();
- } catch (IOException e) {
- }
- }
- }
- }
最后测试上面的代码,首先运行Server类,然后运行Client类,就可以分别在Server端和Client端控制台看到接收到的User对象实例了。
发表评论
-
JVM调优总结
2019-07-10 17:14 371https://www.cnblogs.com/andy-zh ... -
JAVA RESULTSET 使用详解
2012-03-20 21:01 3156调用ResultSet中的last()方法时,提示: java ... -
JAVA采用JDBC执行批处理操作注意的问题
2012-03-20 20:50 1977让我们看看如何使用JDBC API在Java中执行批量插入。虽 ... -
java 各种加密算法详细比较
2012-03-15 11:07 2292本篇内容简要介绍BASE64、MD5、SHA、HMAC几种加密 ... -
java:大数据文件写入,读取,分割,排序,合并
2012-03-05 20:21 2033/** * 大数据排序合并 * * @param ar ... -
JAVA 连接池,方便在平时使用
2012-02-21 15:03 1030java连接池使用 -
Java动态代理实现
2012-02-28 09:19 1000Java动态代理实现 在目前的Java开发包中包含 ... -
Java Socket实战之五 使用加密协议传输对象
2012-02-16 13:49 1126本文地址:http://blog.csdn.net/kongx ... -
Java Socket实战之三 传输对象
2012-02-16 13:48 680转载:http://blog.csdn.net/kongxx/ ... -
Java Socket实战之二 多线程通信
2012-02-16 13:47 1149本文地址:http://blog.csdn.net/kongx ... -
Java Socket实战之一 单线程通信
2012-02-16 13:46 1022转载:http://blog.csdn.net/kongx ... -
java5 新增线程池的使用
2012-02-09 09:26 1154package net.itdos.concurrent; ... -
P2P之UDP穿透NAT的原理与实现
2012-01-11 11:03 1252关键词: P2P UDP NAT 原理 穿透 Traveral ... -
火车票网上订票软件
2012-01-11 09:05 1908JAVA程序GOHOME自动抢票成功!非常棒~~~不多说,直接 ... -
java tcp/ip 通讯服务端和客户端
2011-12-15 08:20 1358java tcp/ip 通讯服务端和客户端 -
java 读取服务器上的某个文件,并解决UTF-8 BOM文件的问号问题
2011-11-28 15:16 1433JAVA读取UTF-8 BOM文件的时候会在文件头产生一个?号 ... -
JAVA 多线程学习笔记
2011-10-12 09:03 1071JAVA 多线程学习笔记 -
XBlink 1.0.0版发布,更轻、更快、更好用
2011-10-09 14:47 1313XBlink 1.0.0版发布,更轻、更快、更好用。 ... -
db4o 文件整理(收缩)
2011-09-29 22:26 1481一直都不敢大胆使用db4o,不是因为它不好用,不稳定,而 ... -
网站应用通过139邮箱发送短信做到日志提醒功能
2011-09-15 09:36 1820首先在139注册一个邮箱,然后再邮箱设置中设置收到邮件通过短信 ...
相关推荐
本压缩包包含的是使用Java语言实现Socket通信的源代码示例。 Java Socket库提供了一种在TCP/IP协议上创建连接的方法,它基于TCP(传输控制协议),这是一种面向连接的、可靠的、基于字节流的传输层通信协议。在Java...
1. Java的Socket编程:MammothCopy的核心技术之一就是利用Java的Socket编程实现客户端与服务器端的通信。Socket是网络通信的基本组件,提供了进程间的通信接口,使得数据能够在不同的网络环境中传输。 2. RMI...
"rar"标签表明这些源代码是以RAR压缩格式提供的,RAR是一种高效的文件压缩格式,可以将多个文件打包成一个单一的档案,便于存储和传输。 在"疯狂Java实战演义(光盘源代码) CSDN"这个压缩包中,我们可能找到以下...
包含的压缩文件可能包含多个示例代码,如Java的TCP和UDP通信程序,分别展示如何传递文字内容和文件。这些示例通常包括服务器端和客户端的代码,可以通过运行它们来实际体验Socket通信的过程。 以上就是Socket的...
这个项目可能还涉及到了数据序列化,以便在网络间传输对象。此外,用户界面的设计也是重要的一部分,可能使用了Java Swing或JavaFX等图形用户界面库。 最后一个项目是下载二进制文件,这涉及到HTTP协议的理解和使用...
- **Java** 是一种广泛使用的面向对象的编程语言,它以其跨平台性(一次编写,到处运行)而闻名。 - **Java 平台** 包括了标准版 (Java SE),企业版 (Java EE) 和微型版 (Java ME)。 - **Java SE 环境** 的安装通常...
当有客户端连接时,`accept()`方法会返回一个新的Socket对象,通过这个新对象与客户端进行通信。 二、TCP与UDP 1. TCP(Transmission Control Protocol):面向连接的、可靠的传输协议。它确保数据按顺序无错地到达...
这个压缩包是该系列的第二卷,提供了28M的压缩文件,解压后可达200多M,由此可见其内容之丰富。下面,我们将深入探讨这些实例可能涵盖的Java开发知识点。 1. **基础语法**:Java的基础语法是学习的起点,包括数据...
【标题】"韩顺平qqJAVA源码+素材"提供了韩顺平老师在JAVA实战教学中设计的一个仿QQ聊天应用的源代码和相关素材。这个项目不仅是一个学习平台,也展示了JAVA编程在实现即时通讯软件方面的应用。 【描述】中的知识点...
2. **Socket编程**:Java的Socket类提供了低级别的网络通信接口,可以用来建立客户端与服务器端的连接,传输数据。在远程控制场景中,客户端通过Socket连接到服务器,发送控制指令并接收反馈。 3. **多线程**:由于...
这个项目可能包含了学生在学习Java编程语言后,为了实践和深化理论知识而进行的实战练习。通过这样的课设,学生可以提升对面向对象编程、网络通信、多线程等Java核心概念的理解。 【描述】"山东大学软件工程2019级...
因为该课题需要用到很多以前从未接触到的知识,如需要用JMF,RTP协议传输视频,JAVA socket编程,如何采集图像等知识。在用JAVA语言编码过程中,因编程规范及其他各种语法问题出现了很多错误,通过老师指导和查阅...
总的来说,这个基于Socket的聊天程序项目是一个综合性的实践,涵盖了网络编程、数据存储、用户认证、多线程处理等多个方面的知识,对于学习和掌握Java网络编程有很好的实战价值。通过这样的课程设计,学生能够深入...
1. **Java网络编程**:游戏中的服务器端与客户端之间的通信主要依赖于Java的Socket编程,通过建立TCP连接实现数据的可靠传输。 2. **多线程**:为了处理并发玩家的请求,服务器端会使用多线程技术,确保每个玩家的...
在通信方面,Java的Socket编程可能被用于实现设备间的数据传输,例如,服务器与基站之间的交互或者用户设备的连接管理。此外,Spring框架的使用可能使得服务的开发和部署更为便捷,Spring Boot和Spring Cloud可以...
2. **Java Socket编程**:Java提供了Socket类和ServerSocket类,用于实现TCP连接。通过创建Socket实例,客户端可以与服务器建立连接,进行数据交换。ServerSocket则在指定端口监听,等待客户端的连接请求。 3. **...
这涉及到网络编程、数据压缩、安全传输等多个技术领域。 Java作为跨平台的编程语言,是开发此类应用的理想选择。Java的多线程支持使得程序能够同时处理多个并发连接,保证了高并发环境下的性能。此外,Java的Socket...
这份资料可能包括了从基础语法到高级特性的实战代码,涵盖了面向对象编程、异常处理、集合框架、IO流、多线程、网络编程等多个领域。 在Java编程中,源码的学习至关重要,因为它能够直观地展示程序的运行逻辑。通过...