用socket可以简单的发送一些文本信息,太复杂的可能发送不了,比如图片音频可能要用到http来发送和接收了。最基本的使用socket来发送一个字符串,但有的时候我们希望能够发送一个类,这样server接收端处理信息将会非常方便。

对于待发送的类,要用socket来发送,则必须实现Serializable接口。实现这个接口后就将发送的对象串行化了,再使用对象输入输出流(ObjectOutputStream, ObjectInputStream)就可实现发送与接收。这个过程有点像通信里边的调制过程,在接收端server再将串行化的对象恢复成之前的类,就像解调过程。比如我们定义一个packets这个类,来发送一些信息。

import java.io.Serializable;public class Packets implements Serializable{public int id;public String value;public int ballot_pid;public int ballot_num;public int position;public Packets(int id, String value, int ballot_pid, int ballot_num, int position){this.id= id;this.value= value;this.ballot_pid= ballot_pid;this.ballot_num= ballot_num;this.position= position;}
}

  在发送的时候,我们定义一个client类。每次我们想发送packets,都先用packets的构造函数新建一个包,比如Packets pack= new Packets(......); 然后再用client里的send方法来将包发送出去,即client.send(pack)就可。

import java.io.IOException;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.net.UnknownHostException;public class Client{private int port= 2013;private String host= "127.0.0.1";public Client(String host, int port){this.host= host;this.port= port;}public void send(Packets packets) throws UnknownHostException, IOException{Socket socket= new Socket(host, port);ObjectOutputStream os= new ObjectOutputStream(socket.getOutputStream());os.writeObject(packets);socket.getOutputStream().flush();socket.close();}
}

  

在接收的时候,用ObjectInputStream来获取这个包。

import java.io.IOException;
import java.io.ObjectInputStream;
import java.net.ServerSocket;
import java.net.Socket;public class Server extends Thread{private int port= 2013;private int sequence= 1;/*flag used to stop this thread*/private boolean stop= false;/*pass addresses of clients from outside*/public Server(int port){this.port= port;}public void run(){Socket socket= null;try{ServerSocket serverSocket= new ServerSocket(port);while(!stop){socket= serverSocket.accept();handleSocket(socket);}}catch(Exception e){e.printStackTrace();}super.run();}private void handleSocket(Socket socket) throws IOException, ClassNotFoundException{ObjectInputStream ois= new ObjectInputStream(socket.getInputStream());Packets packets= (Packets)ois.readObject();/*handle packets start*//*if broadcast, use 'Blog.broadcast(Packets packets)'*/System.out.println("id : "+ packets.id);System.out.println("val: "+ packets.value);System.out.println("pid: "+ packets.ballot_pid);System.out.println("num: "+ packets.ballot_num);System.out.println("pos: "+ packets.position);    /*handle packets end*/socket.close();}/*function used to fail this server*/public void fail(){this.stop= true;}/*function used to restart this server*/public void unfail(){this.stop= false;}    }

转载于:https://www.cnblogs.com/miaoz/p/3500378.html

用java的socket来发送一个类相关推荐

  1. java企业微信消息发送工具类

    java企业微信消息发送工具类 用途 基于java实现调用企业微信发送消息,文件,图片. 实现效果 文件列表 文件名 用途 WechatUtil.java 企业微信工具类 WechatTest.jav ...

  2. Java swing + socket 写的一个五子棋网络对战游戏

    自从开始接触Swing以来,就喜欢写写各种管理系统,写多了就萌生了一种类似于实时在线对战的游戏,经过一番构思后就开始着手设计这个网络对战版本的五子棋了. 游戏代码包含两部分,常规的C/S模式(C代表客 ...

  3. [转载] Java中如何引用另一个类里的集合_Java工程师面试题整理

    参考链接: 在Java中将预定义的类名用作类或变量名 花了一星期把学过的都整理一遍 尽量易懂,从基础到框架 最新版大厂面经汇总出炉,持续更新中 汇总完了上传网盘,设计到后端架构师的一切知识 如果没更新 ...

  4. 1.JAVA猜数字游戏: 一个类A有两个成员变量v、num,v有一个初值100。 定义一个方法guess,对A类的成员变量v,用num进行猜。 *如果num比v大则提示大了,反之则提示小了.

    思路:  * 1.创建一个类,定义两个成员变量v和num,v是固定值所以直接赋值,num是键盘录入的.  * 2.定义一个setNum类,将来通过对象调用将键盘录入接收的数据进行设置  * 3.创建一 ...

  5. java 分子 分母_Java写一个类表示分数。分数由分子和分母组成。

    写一个类表示分数.分数由分子和分母组成. 写一个方法,实现分数相乘. 写一个方法,显示分数的值. 利用这个类:求分数 1/3 和 2/5 的乘积,并显示最终结果. public class zhouc ...

  6. Java中如何引用另一个类里的集合_【18期】Java序列化与反序列化三连问:是什么?为什么要?如何做?...

    Java序列化与反序列化是什么? Java序列化是指把Java对象转换为字节序列的过程,而Java反序列化是指把字节序列恢复为Java对象的过程: 序列化:对象序列化的最主要的用处就是在传递和保存对象 ...

  7. java中script类_在Scripting java(javax.script)中导入一个类

    我想将我在项目中创建的类导入到我的脚本中 我这样做但它不起作用: function doFunction(){ //Objectif Mensuel importPackage(java.lang); ...

  8. java 如何封装类_Java封装一个类怎么实现?

    封装 将某些东西包装在一起,然后以新的完整形式呈现出来: 隐藏属性.方法或实现细节的处理方式称为封装: 封装其实就是有选择性地公开或隐藏某些信息,它解决了数据的安全性问题. 构建对象的方法 和数组相似 ...

  9. java无名粉_使用JAVA为“无名的粉”写一个类,具体要求如下

    满意答案 urzrke 2013.05.15 采纳率:55%    等级:12 已帮助:6697人 package com.a2000;public class TestWuMingFen { pri ...

最新文章

  1. virtualbox centos5 分辨率_一种高分辨率、高帧率的LCoS显示芯片设计方法
  2. 网络加速和优化控制常用管理
  3. 同一台服务器,mysql登录不了指定端口的问题
  4. wordcloud用来制作词云
  5. getComputedStyle与currentStyle获取样式(style/class)
  6. 聊天机器人中的 A/B 测试
  7. pip 安装GDAL
  8. nopcommerce插件深度剖析
  9. winserver 08 64位安装sql05 64位提示asp版本注册
  10. 深信服桌面云的各种密码
  11. 为什么会存在乱码?什么是编解码?为什么会有这么多字符集?
  12. 中国公用计算机互联网网络简称为什么,中国公用计算机互联网国际联网管理办法...
  13. 几款手机网站前端框架
  14. python基础学习笔记
  15. iOS 12 - iOS 15,如何在iPhone上设置“早上好”功能
  16. 生命探测仪能穿墙能探废墟 但不能穿透金属(图)
  17. [Android源码分析]L2CAP的bind分析以及psm和cid的介绍和实现
  18. elasticsearch查询报错411状态码 The requested URL could not be retrieved
  19. python计算器gui设计_Python 计算器界面设计
  20. 《用户体验设计:100堂入门课》20190920

热门文章

  1. linux如何查看nginx是否启动
  2. 59.node的serve-favicon中间件的使用
  3. windows 服务实现定时任务调度(Quartz.Net)
  4. 怎么对MySQL数据库操作大数据?这里有思路
  5. eclipse中选中字段,其他相同字段被覆盖的颜色修改
  6. 软件工程习题2第三小题
  7. 修改Android中strings.xml文件, 动态改变数据
  8. 【连载】【FPGA黑金开发板】Verilog HDL那些事儿--数码管电路驱动(八)
  9. 懒不是傻懒,如果你想少干,就要想出懒的方法。要懒出风格,懒出境界。
  10. Matlab怎样将传递函数转换成差分方程