Java Socket对象数据传输
来源:互联网 发布:网络新词语 编辑:程序博客网 时间:2024/04/28 01:15
前面写了一篇博客,是Java Socket的学习,下面做了一个Java Socket之间的对象数据传输。
单线程的对象传输入:
package com.zyujie.socket;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.net.ServerSocket;import java.net.Socket;import java.util.ArrayList;import java.util.List;public class ObjectServer {public static void main(String[] arg) throws Exception {//创建服务器端的Socket,并监听端口6688ServerSocket socketConnection = new ServerSocket(6688);System.out.println("服务器已经开启,等待连接。");//接收客户端连接,并返回一个socket对象Socket scoket = socketConnection.accept();//对象数据的输入与输出,需要用ObjectInputStream和ObjectOutputStream进行ObjectInputStream in = new ObjectInputStream(scoket.getInputStream());ObjectOutputStream out = new ObjectOutputStream(scoket.getOutputStream());//读取客户端的对象数据流City city = (City) in.readObject();List cityList = city.getCityList();for (int i = 0; i < cityList.size(); i++) {System.out.println("服务器端得到城市数据:" + cityList.get(i).toString());}//返回给客户端的对象City cityBack = new City();List list = new ArrayList();list.add("广州");list.add("深圳");cityBack.setCityList(list);out.writeObject(cityBack);out.flush();in.close();out.close();}}
package com.zyujie.socket;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.net.InetAddress;import java.net.Socket;import java.util.ArrayList;import java.util.List;public class ObjectClient {public static void main(String[] arg) throws Exception {//封装一个对象实例City city = new City();List list = new ArrayList();list.add("北京");list.add("上海");list.add("天津");list.add("重庆");city.setCityList(list);//连接到服务器端Socket socketConnection = new Socket(InetAddress.getLocalHost(), 6688);//使用ObjectOutputStream和ObjectInputStream进行对象数据传输ObjectOutputStream out = new ObjectOutputStream(socketConnection.getOutputStream());ObjectInputStream in = new ObjectInputStream(socketConnection.getInputStream());//将客户端的对象数据流输出到服务器端去out.writeObject(city);out.flush();//读取服务器端返回的对象数据流City cityBack = (City) in.readObject();List backList = cityBack.getCityList();for (int i = 0; i < backList.size(); i++) {System.out.println("客户端得到返回城市数据:" + backList.get(i).toString());}out.close();in.close();}}
需要一个对象实体类,且要继承java.io.Serializable,序列化后的对象,才可以通过流的方式传输。
package com.zyujie.socket;import java.io.Serializable;import java.util.List;public class City implements Serializable {//实体类,特别注意,作为对象数据流传输,需要继承java.io.Serializable,使用对象进行序列化private List cityList;public List getCityList() {return cityList;}public void setCityList(List cityList) {this.cityList = cityList;}}
多线程,只是在服务器端启了线程,可以做CPU的线程池,这里没有做。
package com.zyujie.socket;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.net.ServerSocket;import java.net.Socket;import java.util.ArrayList;import java.util.List;public class ObjectServerApp extends Thread {private Socket client;/* * 构造函数,接收每一个socket实例 */public ObjectServerApp(Socket socket) {this.client = socket;}/* * 线程执行方法 */public void run() {try {System.out.println("线程开启");//对象数据流的获取与返回ObjectInputStream in = new ObjectInputStream(client.getInputStream());ObjectOutputStream out = new ObjectOutputStream(client.getOutputStream());City city = (City) in.readObject();List cityList = city.getCityList();for (int i = 0; i < cityList.size(); i++) {System.out.println("服务器端得到城市数据:" + cityList.get(i).toString());}List list = new ArrayList();list.add("广州");list.add("深圳");City cityBack = new City();cityBack.setCityList(list);out.writeObject(cityBack);in.close();out.close();} catch (Exception e) {} finally {}}/* * 启用线程方法实现多个用户连接socket服务器端. */public static void main(String[] args) throws IOException {// 创建服务端,监听端口6688ServerSocket server = new ServerSocket(6688);System.out.println("服务器已经开启,等待连接。");// 使用服务器端保持永久监听状态while (true) {// 接收每一个客户端的连接,并返回socket实例ObjectServerApp osa = new ObjectServerApp(server.accept());// 为每一个客户端启一个线程,去执行操作osa.start();}}}
- Java Socket对象数据传输
- socket数据传输
- socket数据传输
- Socket数据传输
- java socket 连接数据传输判断是否结束
- Javaの网络数据传输之Socket
- Java、C#端进行Socket异步数据传输
- 数据传输对象
- Android与Java 服务器使用Socket协议实现Json数据传输
- socket 数据传输源码
- android socket 网络数据传输
- udp的socket数据传输
- socket数据传输,并不复杂
- c++ socket 数据传输总结
- socket实现UDP数据传输
- socket实现TCP数据传输
- socket实现UDP数据传输
- socket实现TCP数据传输
- CSpinButtonCtrl 调节小数
- 关于Binder线程池
- Resharper
- ibatis dynamic
- ExtJS4新发现09_xtype的含义以及对应类
- Java Socket对象数据传输
- 统计单源最短路径的条数 (DFS+Dijstra算法)和记忆化搜索
- 对mysql数据库_登陆_的理解
- Go-简洁的并发
- TRUNC函数
- ALSA 驱动框架和驱动开发 (一)
- openstack删除一个实例的流程及操作
- JNI及Android JNI 开发基本知识和具体操作步骤
- 一个逻辑问题_张村说谎李村不说谎