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
- 网络编程---Socket编程
- 网络编程:Socket编程
- 网络编程(Socket编程)
- 网络socket编程指南
- 网络socket编程指南
- 网络Socket编程
- 网络socket编程指南
- 网络socket编程指南
- 网络socket编程指南
- 网络socket编程指南
- 网络编程 socket
- 网络编程 socket
- 网络socket编程指南
- 网络socket编程指南
- 网络socket编程指南
- 网络socket编程
- 网络socket编程指南
- 网络socket编程指南
- startActivityForResult和setResult详解
- 最值得学习的10个C语言开源项目
- ios developer tiny share-20160830
- 使用Xcode工具symbolicatecrash将设备导出的 .crash 文件符号化 (Xcode7.3)
- spark中的Broadcast variables和Accumulator (广播变量和累加器)
- Socket网络编程
- Linux上搭建FTP服务器-从基础到进阶
- MySQL创建用户与授权方法
- Android的普通广播和有序广播
- APNS推送
- 线程消息处理机制
- 译文: Manila Admin Reference (Mitaka版本)
- Docker与容器安全
- awk & sed之奇数行与偶数行的打印