好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > UDP DUP超時UPD端口狀態檢測代碼示例

UDP DUP超時UPD端口狀態檢測代碼示例

熱門標簽:云南云電銷機器人招商 江蘇自動外呼系統一般多少錢 比較穩定的外呼系統 山東電信外呼系統靠譜嗎 鸚鵡螺號航海地圖標注時間 長沙回撥外呼系統 400 電話 申請費用 信貸電銷機器人系統 ai電話機器人營銷

我之前寫過一個示例,簡單UDP服務端和客戶端示例 ,里面寫過,如果你把自己當作客戶端,那么客戶端是可以指定自己的端口去發數的。

ds.setSoTimeout(5000);即為收數超時時間,如果不設置,那就是等待,比電視劇里面愛情片都漫長的等待,而且結果是一樣的,都是把自己等死了就不再等了。但是這個超時時間不能當作是你這個請求的超時時間,請注意這個概念,因為這個超時只是用于標記這段時間沒有從網絡中獲取數據,但是即使獲取數據了,那也不一定是你的,這個下面看示例就會明白。

然后就是端口問題,上面也說了你可以自己指定端口,也可以是把自己當作客戶端,需要發送數據時就創建一個連接對象然后發送數據,這樣端口就是動態的。意思就是說,只要DatagramSocket對象沒有被重新初始化或消失,那么本地打開的這個UDP端口就不會關閉。

然后就是UDP狀態的問題,其實早先就也有一篇文章了, UDP連接對象的理解和使用。無狀態是說這個連接沒有狀態,鬼知道他到底有沒有服務端,鬼也不知道就算那個服務端在他到底死了沒有。但是對于本地來說,如果你的DatagramSocket對象一直存在,那么你的本地端口就是有狀態的,他是活的。

然后做一個示例:

package test;
import java.io.*;
import java.net.*;
import java.util.Arrays;
/**
 * UDP客戶端程序,用于對服務端發送數據,并接收服務端的回應信息
 */
public class UdpClientSocket {
	private byte[] buffer = new byte[1024];
	private static DatagramSocket ds = null;
	/**
	 * 測試客戶端發包和接收回應信息的方法
	 */
	public static void main(String[] args) throws Exception {
		UdpClientSocket client = new UdpClientSocket();
		String serverHost = "127.0.0.1";
		int serverPort = 10002;
		client.send(serverHost, serverPort, new byte[]{1,2,3,4,5});
		while(true){
			byte[] bt = client.receive();
			if(null != bt && bt.length > 0)
				System.out.println("收到數據:" + Arrays.toString(bt));
			Thread.sleep(1000);
		}
	}
	/**
	 * 構造函數,創建UDP客戶端
	 */
	public UdpClientSocket() throws Exception {
		ds = new DatagramSocket(8899); // 邦定本地端口作為客戶端
		ds.setSoTimeout(5000);
	}
	/**
	 * 向指定的服務端發送數據信息
	 */
	public final void send(final String host, final int port,final byte[] bytes) throws IOException {
		DatagramPacket dp = new DatagramPacket(bytes, bytes.length, InetAddress.getByName(host), port);
		ds.send(dp);
	}
	/**
	 * 接收從指定的服務端發回的數據
	 */
	public final byte[] receive() throws Exception {
		try {
			DatagramPacket dp = new DatagramPacket(buffer, buffer.length);
			ds.receive(dp);		
			byte[] data = new byte[dp.getLength()];
			System.arraycopy(dp.getData(), 0, data, 0, dp.getLength());		
			return data;
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}
}

運行一直報錯:

java.net.SocketTimeoutException: Receive timed out
at java.net.PlainDatagramSocketImpl.receive0(Native Method)
at java.net.PlainDatagramSocketImpl.receive(PlainDatagramSocketImpl.java:136)
at java.net.DatagramSocket.receive(DatagramSocket.java:712)
at test.UdpClientSocket.receive(UdpClientSocket.java:46)
at test.UdpClientSocket.main(UdpClientSocket.java:20)
java.net.SocketTimeoutException: Receive timed out
at java.net.PlainDatagramSocketImpl.receive0(Native Method)
at java.net.PlainDatagramSocketImpl.receive(PlainDatagramSocketImpl.java:136)
at java.net.DatagramSocket.receive(DatagramSocket.java:712)
at test.UdpClientSocket.receive(UdpClientSocket.java:46)
at test.UdpClientSocket.main(UdpClientSocket.java:20)

使用TCPUDPDbg向8899發送數據,可以收到:

收到數據:[16, 17, 18, 19, 20]

這里示例中已經寫明

1.本地端口是8899

2.收數超時時間是5秒

3.向本地10002端口發送了一組數據,鬼知道有沒有收到

4.不斷獲取本地端口8899收到的UDP數據

然后發現

1.發送數據沒有報錯

2.一直報錯收數超時

3.使用TCPUDPDbg向8899發送數據能夠收到

總結:

1.UDP能指定收數超時,但是每個請求的超時需要自己控制

2.UDP可以邦定本地端口發數,而且這個端口可以有狀態存活

3.UDP沒有狀態,但是本地可以有

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

標簽:齊齊哈爾 澳門 亳州 嘉興 拉薩 烏海 衡陽 運城

巨人網絡通訊聲明:本文標題《UDP DUP超時UPD端口狀態檢測代碼示例》,本文關鍵詞  UDP,DUP,超時,UPD,端口,狀態,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《UDP DUP超時UPD端口狀態檢測代碼示例》相關的同類信息!
  • 本頁收集關于UDP DUP超時UPD端口狀態檢測代碼示例的相關信息資訊供網民參考!
  • 推薦文章