Socket网络编程

来源:互联网 发布:构建中小企业网络v6.0 编辑:程序博客网 时间:2024/06/17 13:04

使用Socket可以非常方便的进行通信,主要分成两个部分:

第一个部分ServerSocket,服务端等待客户端的连接;

第二个部分Socket,客户端连接服务端。

ServerSocket的使用方法如下

int port=23456;ServerSocket server=new ServerSocket(port);while(true){//等待客户端的连接Socket ss=server.accept();    //收取客户端发送来的消息BufferedReader br=new BufferedReader(new InputStreamReader(ss.getInputStream()));String line=br.readLine();System.out.println(line);}

Socket的使用方法如下

String ip="192.168.1.113";int port=23456;Socket socket=new Socket(ip,port);//发送消息给服务端OutputStream os=socket.getOutputStream();os.write("你好".getBytes("utf-8"));os.close();

当服务端和客户端建立连接之后,可以互相发送消息和收取消息,

使用getOutputStream()方法进行发送消息,getInputStream()方法进行接收消息。

由于网络操作响应时间不确定,因此把这类操作放入新线程当中,以避免主程序长时间阻塞。

以下是对socket操作的封装类,并且将网络操作放入了新线程当中。

public class MySocket {private int port;private ServerSocket server;private List<Message> msgList;public MySocket(int port){this.port=port;msgList=new ArrayList<Message>();try{   server=new ServerSocket(port);   acceptThread.start();//开启接受信息线程}catch(Exception e){e.printStackTrace();}}//发送消息线程public void send(Message msg){Thread sendThread=new Thread(){@Overridepublic void run() {super.run();try {Socket socket = new Socket(msg.getIp(),msg.getPort());OutputStream os=socket.getOutputStream();os.write(msg.getContent().getBytes("utf-8"));os.close();socket.close();}catch (IOException e) {e.printStackTrace();}}};sendThread.start();}//接受信息的线程private Thread acceptThread=new Thread(){@Overridepublic void run() {super.run();while(true){try {Socket socket=server.accept();InputStream is=socket.getInputStream();String content=new BufferedReader(new InputStreamReader(is)).readLine();Message message=new Message();message.setIp(socket.getInetAddress().toString());message.setPort(socket.getPort());message.setContent(content);msgList.add(message);System.out.println(message.getContent());is.close();socket.close();} catch (IOException e) {e.printStackTrace();}}}};}

其中所使用到的Message类如下

public class Message {private String ip;//ip地址private int port;//端口号private String content;//信息内容public Message(){ }public Message(String ip,int port,String content){this.ip=ip;this.port=port;this.content=content;}public String getIp() {return ip;}public void setIp(String ip) {this.ip = ip;}public int getPort() {return port;}public void setPort(int port) {this.port = port;}public String getContent() {return content;}public void setContent(String content) {this.content = content;}}
0 0
原创粉丝点击