<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ~~~ package com.sjf; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.SocketException; /** * @time 2015-05-27 * @desc UDP通信 * @author sjf0115 * */ public class Server { private byte[] buffer = new byte[1024]; private DatagramSocket socket = null; private DatagramPacket packet = null; private InetSocketAddress socketAddress = null; private InetAddress clientAddress; private String clientIP; private int clientPort; private String clientData; //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ /** * 構造函數,綁定主機和端口. * @param ip IP 地址 * @param port 端口 * @throws Exception */ public Server(String ip, int port) throws Exception { // 綁定IP地址和端口. Bind(ip,port); System.out.println("[服務端啟動]"); } //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ public Server() throws SocketException { // 構造數據報套接字并將其綁定到本地主機上任何可用的端口 socket = new DatagramSocket(); System.out.println("[服務端啟動]"); } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ /** * 綁定監聽地址和端口. * @param ip IP地址 * @param port 端口 * @throws SocketException */ public void Bind(String ip, int port) throws SocketException { // 根據 IP 地址和端口號創建套接字地址 socketAddress = new InetSocketAddress(ip, port); // 創建數據報套接字,將其綁定到指定的本地地址 socket = new DatagramSocket(socketAddress); packet = new DatagramPacket(buffer, buffer.length); } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ public final String getOrgIp() { return clientIP; } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ /** * 設置超時時間 * @param timeout 超時時間 * @throws Exception */ public void SetTimeout(int timeout) throws Exception { /* 啟用/禁用帶有指定超時值的 SO_TIMEOUT,以毫秒為單位。 * 將此選項設為非零的超時值時,對此 DatagramSocket 調用 receive() 將只阻塞此時間長度。 * 如果超過超時值,將引發 java.net.SocketTimeoutException,雖然 DatagramSocket 仍舊有效。 * 選項必須在進入阻塞操作前被啟用才能生效。 */ socket.setSoTimeout(timeout); } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ /** * 獲得超時時間. * @return 返回超時時間. * @throws Exception */ public int GetTimeout() throws Exception { return socket.getSoTimeout(); } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ /** * 接收數據包,該方法會造成線程阻塞. * @return 返回接收的數據串信息 * @throws IOException */ public String Receive() throws IOException { /* * 從此套接字接收數據報包。當此方法返回時,DatagramPacket 的緩沖區填充了接收的數據。 * 數據報包也包含發送方的 IP 地址和發送方機器上的端口號。此方法在接收到數據報前一直阻塞。 * 數據報包對象的 length 字段包含所接收信息的長度。如果信息比包的長度長,該信息將被截短。 */ socket.receive(packet); // 數據報包包含發送方的 IP 地址 clientAddress = packet.getAddress(); clientIP = clientAddress.getHostAddress(); // 數據報包包含發送方的端口號 clientPort = packet.getPort(); // 數據報包包含發送方的數據 clientData = new String(packet.getData(), 0, packet.getLength()); return " ["+clientData+"]"; } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ /** * 將響應包發送給請求端. * @param bytes 回應報文 * @throws IOException */ public void Send(String info) throws IOException { packet.setAddress(clientAddress); packet.setPort(clientPort); packet.setData(info.getBytes()); /* * 從此套接字發送數據報包。DatagramPacket 包含的信息指示:將要發送的數據、其長度、遠程主機的 IP 地址和遠程主機的端口號。 */ socket.send(packet); } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ /** * 關閉udp監聽口. */ public void close() { try { socket.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; Server udpServerSocket = new Server(serverHost, serverPort); while (true) { String info = udpServerSocket.Receive(); System.out.println("["+udpServerSocket.clientPort+"]->"+info); udpServerSocket.Send("Reponse-----"+info); } } } ~~~ ~~~ package com.sjf; import java.io.*; import java.net.*; /** * @time 2015-05-27 * @desc UDP通信 * @author QPING */ public class Client { private byte[] buffer = new byte[1024]; private DatagramSocket socket = null; private InetSocketAddress socketAddress = null; private String clientIP; private int clientPort; private String clientData; private InetAddress clientAddress; private DatagramPacket sendPacket; private DatagramPacket receivePacket; //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ public Client(String host, int port) throws Exception { // 根據 IP 地址和端口號創建套接字地址 socketAddress = new InetSocketAddress(host, port); // 創建數據報套接字,將其綁定到指定的本地地址 socket = new DatagramSocket(socketAddress); System.out.println("服務端啟動!"); } //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ /** * 構造函數,創建UDP客戶端 * @throws Exception */ public Client() throws Exception { socket = new DatagramSocket(); } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ /** * 設置超時時間,該方法必須在bind方法之后使用. * @param timeout 超時時間 * @throws Exception */ public final void SetTimeout(final int timeout) throws Exception { socket.setSoTimeout(timeout); } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ /** * 獲得超時時間. * @return 返回超時時間 * @throws Exception */ public int GetTimeout() throws Exception { return socket.getSoTimeout(); } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ public DatagramSocket GetSocket() { return socket; } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ /** * 向指定的服務端發送數據信息. * @param ip 服務器主機地址 * @param port 服務端端口 * @param bytes 發送的數據信息 * @return 返回構造后俄數據報 * @throws IOException */ public DatagramPacket Send(String ip,int port,String info) throws IOException { byte[] bytes = info.getBytes(); sendPacket = new DatagramPacket(bytes, bytes.length); sendPacket.setAddress(InetAddress.getByName(ip)); sendPacket.setPort(port); socket.send(sendPacket); return sendPacket; } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ /** * 接收從指定的服務端發回的數據. * @param lhost 服務端主機 * @param lport 服務端端口 * @return 返回從指定的服務端發回的數據. * @throws Exception */ public String Receive(String lhost,int lport) throws Exception { receivePacket = new DatagramPacket(buffer, buffer.length); socket.receive(receivePacket); // 數據報包包含發送方的 IP 地址 clientAddress = receivePacket.getAddress(); clientIP = clientAddress.getHostAddress(); // 數據報包包含發送方的端口號 clientPort = receivePacket.getPort(); // 數據報包包含發送方的數據 clientData = new String(receivePacket.getData(), 0, receivePacket.getLength()); return "["+clientData+"]"; } //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ /** * 關閉udp連接. */ public void close() { try { socket.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; String myIP = "127.0.0.2"; int myPort = 3333; Client client = new Client(myIP,myPort); while(true) { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println("["+myPort+"] "); String str = br.readLine(); client.Send(serverHost, serverPort, str); String info = client.Receive(serverHost, serverPort); System.out.println("["+client.clientPort+"]->" + info); } } } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看