Java Socket UDP协议 的超级简单使用
Java socket udp协议send.jpg
server.jpg
SocketClient.javaimport java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.UnknownHostException;
/**
* 消息发送端
*
* @author 肖蕾
*/
public class SocketClient
{
private DatagramSocket socket = null;
private DatagramPacket packet = null;
private byte[] def = new byte;
private InetAddress address;
private int port = -1;
public SocketClient()
{
try
{
socket = new DatagramSocket();
packet = new DatagramPacket(def, def.length);
} catch (Exception e)
{
throw new RuntimeException("SocketClient 初始化失败");
}
}
public SocketClient(String ip, int port)
{
try
{
socket = new DatagramSocket();
packet = new DatagramPacket(def, def.length);
address = InetAddress.getByName(ip);
packet.setAddress(address);
this.port = port;
packet.setPort(this.port);
} catch (UnknownHostException e)
{
throw new RuntimeException(
"SocketClient(String ip,int port) 发送ip设置失败");
} catch (Exception e)
{
throw new RuntimeException("SocketClient 初始化失败");
}
}
/**
* 发送消息
*
* @param data
* 发送的内容
* @param ip
* 发送的ip地址
* @param port
* 发送的端口号
*/
public void sendMessage(byte[] data)
{
try
{
packet.setData(data);
packet.setLength(data.length);
socket.send(packet);
} catch (Exception e)
{
String errorMsg = "";
if (address == null)
{
errorMsg += "\n发送的地址为空 setAddress(String ip)\n";
}
if (port == -1)
{
errorMsg += "发送的端口为空 setPort(int port)\n";
}
throw new RuntimeException(errorMsg);
}
}
/**
* 设置发送的IP地址
*
* @param ip
* 发送的ip地址
*/
public void setAddress(String ip)
{
try
{
address = InetAddress.getByName(ip);
packet.setAddress(address);
} catch (UnknownHostException e)
{
throw new RuntimeException("setAddress(String ip) 发送ip设置失败");
}
}
/**
* 设置发送的端口
*
* @param port
* 发送的端口
*/
public void setPort(int port)
{
this.port = port;
packet.setPort(this.port);
}
/**
* 释放资源
*/
public void close()
{
if (socket != null)
{
socket.close();
}
}
}SocketServer.javaimport 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;
for (int i = 0; i < msg.length; i++)
{
msg = data;
}
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;
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);
} UDP比TCP简单。
页:
[1]