Java Socket 发送对象
来源:互联网 发布:淘宝卖家号被冻结 编辑:程序博客网 时间:2024/05/16 01:17
以前写聊天程序都是用字符串加个标志就直接发送到服务器,然后转发了。
现在要求我用对象流直接发送对象,测试了一下,记录一下。
其实我更倾向用json发送对象的,json说白了也是字符串,等有空了好好研究研究。
主要功能:客户端给服务器发送个对象,服务器接收到了打印出来。反过来是差不多了,就不写了。
上面是整体架构。
User类就两个属性。
package com.qiantu.bean;import java.io.Serializable;public class User implements Serializable {private static final long serialVersionUID = 1L;private String name;private String 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;}}
服务器端:接收客户端发送过来的user对象:
package test;import java.io.BufferedInputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.net.ServerSocket;import java.net.Socket;import com.qiantu.bean.User;public class TestServer {public void start() {try {ServerSocket ss = new ServerSocket(7777);System.out.println("start to accept...");Socket socket = ss.accept();//建立输入流ObjectInputStream ois = new ObjectInputStream( new BufferedInputStream(socket.getInputStream())); Object obj = ois.readObject(); if (obj != null) { User user = (User)obj;//把接收到的对象转化为user System.out.println("user: " + user.getName()); System.out.println("password: " + user.getPassword()); } ois.close(); socket.close(); ss.close();} catch (IOException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();}}public static void main(String[] args) {new TestServer().start();}}
客户端:给服务器端发送user对象:
package client;import java.io.IOException;import java.io.ObjectOutputStream;import java.net.Socket;import java.net.UnknownHostException;import com.qiantu.bean.User;public class TestClient {public static void main(String[] args) {new TestClient().start();}public void start() {try {Socket socket = new Socket("127.0.0.1", 7777);//建立输入流ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());User user = new User();user.setName("梁国俏");user.setPassword("123456");//输入对象, 一定要flush() oos.writeObject(user);oos.flush();oos.close();socket.close();} catch (UnknownHostException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}
运行结果:
要注意的地方:
《1》实体类要实现Serializable类,添加标识serialVersionUID。
《2》发送对象之后要flush();
《3》这个比较重要,搞了我半天不知道哪里出错,言来是这个。
服务器端和客户端两边的实体类要一模一样,类名一样,包名也要一样。我就是因为包名不一样搞了很久。。。。
- Java Socket 发送对象
- flex socket.writeObject()发送对象,java接收flex socket发送过来的对象
- java Socket 使用通用json包 发送 json对象
- java Socket 使用通用json包 发送 json对象
- java Socket 使用通用json包 发送 json对象
- java Socket 发送邮件
- Java socket发送图片
- java socket 发送文件
- java socket 发送文件
- Java Socket 发送邮件
- java socket 实现邮件发送
- java socket发送http请求
- Java UDP Socket消息发送
- socket中将对象转化为字节发送
- Socket.io 的发送对象范围
- flex socket.readObject() //flex读取java服务器端发送过来的对象
- Java Socket对象数据传输
- java Socket 传对象
- uml用例图
- Infragistics NetAdvantage UltraGrid的使用
- String基本字符系列容器
- Ultra-QuickSort
- php SOAP 错误[Client] looks like we got no XML document 处理办法
- Java Socket 发送对象
- 链接参考
- C#老生常谈之异步调用的参数及返回值
- 面试题 c++
- spring 组件注解
- JSON for java入门总结
- vector 遍历及下标访问
- 斐波那契数
- windows安装Apache,注册服务出现“(OS 5)拒绝访问。 : AH00369: Failed to open the WinNT service manager..."错误