- 论坛徽章:
- 1
|
Java socket udp协议
send.jpg
server.jpg
SocketClient.javaSocketServer.java- import java.net.DatagramPacket;
- import java.net.DatagramSocket;
-
- public class SocketServer
- {
- private byte[] buff= null;
- private DatagramPacket packet = null;
- private DatagramSocket server = null;
- private OnMessageListener listener = null;
- private boolean loop = false;
- Thread thread = new Thread()
- {
- public void run()
- {
- try
- {
- while (loop)
- {
- if (server != null)
- {
- server.receive(packet);
- byte []data = packet.getData();
- byte []msg = new byte[packet.getLength()];
- for (int i = 0; i < msg.length; i++)
- {
- msg[i] = data[i];
- }
- if (SocketServer.this.listener != null)
- {
- SocketServer.this.listener.getmsg(msg,packet.getAddress().getHostAddress(),packet.getPort());
- }
- }
- }
- } catch (Exception e)
- {
- }
- };
- };
- /**
- * 构造函数 初始化数据
- * @param port 端口
- * @param size 缓冲区的长度
- * @throws Exception
- */
- public SocketServer(int port, int size)
- {
- try
- {
- buff= new byte[size];
- packet = new DatagramPacket(buff, buff.length);
- server = new DatagramSocket(port);
- } catch (Exception e)
- {
- throw new RuntimeException(e);
- }
- }
- /**
- * 设置数据的获取者
- * @param listener
- */
- public SocketServer setOnMessageListener(OnMessageListener listener)
- {
- this.listener = listener;
- return this;
- }
- /**
- * 开始接收数据
- */
- public void start()
- {
- loop = true;
- thread.start();
- }
- /**
- * 关闭流 释放资源
- */
- public void close()
- {
- loop = false;
- if (server != null)
- {
- server.close();
- }
- }
-
- }
- /**
- * 数据获取者
- * @author 肖蕾
- */
- interface OnMessageListener
- {
- /**
- * 获取发送的数据,ip地址 以及端口号
- * @param data 数据
- * @param ip ip地址
- * @param port 端口号
- */
- public void getmsg(byte []data,String ip,int port);
- }
复制代码 |
|