package com.zkzy.fxfh.utils; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.SocketException; /** * UTP服务类. */ public class TalkServerUDP { private byte[] buffer = new byte[1024]; private DatagramSocket ds = null; private DatagramPacket packet = null; private InetSocketAddress socketAddress = null; private String orgIp; /** * 构造函数,绑定主机和端口. * @param host 主机 * @param port 端口 * @throws Exception */ public TalkServerUDP(String host, int port) throws Exception { socketAddress = new InetSocketAddress(host, port); ds = new DatagramSocket(socketAddress); System.out.println("服务端启动!"); } public final String getOrgIp() { return orgIp; } /** * 设置超时时间,该方法必须在bind方法之后使用. * @param timeout 超时时间 * @throws Exception */ public final void setSoTimeout(int timeout) throws Exception { ds.setSoTimeout(timeout); } /** * 获得超时时间. * @return 返回超时时间. * @throws Exception */ public final int getSoTimeout() throws Exception { return ds.getSoTimeout(); } /** * 绑定监听地址和端口. * @param host 主机IP * @param port 端口 * @throws SocketException */ public final void bind(String host, int port) throws SocketException { socketAddress = new InetSocketAddress(host, port); ds = new DatagramSocket(socketAddress); } /** * 接收数据包,该方法会造成线程阻塞. * @return 返回接收的数据串信息 * @throws IOException */ public final String receive() throws IOException { packet = new DatagramPacket(buffer, buffer.length); ds.receive(packet); orgIp = packet.getAddress().getHostAddress(); String info = new String(packet.getData(), 0, packet.getLength()); System.out.println("接收信息:" + info); return info; } /** * 将响应包发送给请求端. * @param bytes 回应报文 * @throws IOException */ public final void response(String info) throws IOException { System.out.println("客户端地址 : " + packet.getAddress().getHostAddress() + ",端口:" + packet.getPort()); DatagramPacket dp = new DatagramPacket(buffer, buffer.length, packet .getAddress(), packet.getPort()); dp.setData(info.getBytes()); ds.send(dp); } /** * 设置报文的缓冲长度. * @param bufsize 缓冲长度 */ public final void setLength(int bufsize) { packet.setLength(bufsize); } /** * 获得发送回应的IP地址. * @return 返回回应的IP地址 */ public final InetAddress getResponseAddress() { return packet.getAddress(); } /** * 获得回应的主机的端口. * @return 返回回应的主机的端口. */ public final int getResponsePort() { return packet.getPort(); } /** * 关闭udp监听口. */ public final void close() { try { ds.close(); } catch (Exception ex) { ex.printStackTrace(); } } /** * 测试方法. * @param args * @throws Exception */ public static void main(String[] args) throws Exception { String serverHost = "127.0.0.1"; int serverPort = 3344; TalkServerUDP udpServerSocket = new TalkServerUDP(serverHost, serverPort); while (true) { udpServerSocket.receive(); udpServerSocket.response("你好,sterning!"); } } }
最近下载更多
ITfans LV19
2020年12月31日
liuxie LV12
2020年12月14日
cjy123 LV2
2020年4月6日
fanxiaolin84 LV10
2019年12月26日
哈勃8910 LV1
2019年5月18日
l1104119188 LV2
2019年4月23日
1847731288 LV13
2019年4月15日
zyx123452 LV1
2019年3月22日
zhjwgs LV15
2019年3月4日
dasda66 LV1
2018年11月14日