利用java的socket发送一个类

来源:互联网 发布:分期网站源码 编辑:程序博客网 时间:2024/05/22 17:15

注意注意注意!需要串行化!



用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;    }        }
复制代码
阅读全文
0 0
原创粉丝点击