Socket网络编程
Posted 黄大仙爱编程
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Socket网络编程相关的知识,希望对你有一定的参考价值。
使用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(){ @Override public 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(){ @Override public 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; } }
以上是关于Socket网络编程的主要内容,如果未能解决你的问题,请参考以下文章
VSCode自定义代码片段14——Vue的axios网络请求封装
VSCode自定义代码片段14——Vue的axios网络请求封装