濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > UDP DUP超時(shí)UPD端口狀態(tài)檢測(cè)代碼示例

UDP DUP超時(shí)UPD端口狀態(tài)檢測(cè)代碼示例

熱門標(biāo)簽:云南云電銷機(jī)器人招商 江蘇自動(dòng)外呼系統(tǒng)一般多少錢 比較穩(wěn)定的外呼系統(tǒng) 山東電信外呼系統(tǒng)靠譜嗎 鸚鵡螺號(hào)航海地圖標(biāo)注時(shí)間 長(zhǎng)沙回?fù)芡夂粝到y(tǒng) 400 電話 申請(qǐng)費(fèi)用 信貸電銷機(jī)器人系統(tǒng) ai電話機(jī)器人營(yíng)銷

我之前寫過一個(gè)示例,簡(jiǎn)單UDP服務(wù)端和客戶端示例 ,里面寫過,如果你把自己當(dāng)作客戶端,那么客戶端是可以指定自己的端口去發(fā)數(shù)的。

ds.setSoTimeout(5000);即為收數(shù)超時(shí)時(shí)間,如果不設(shè)置,那就是等待,比電視劇里面愛情片都漫長(zhǎng)的等待,而且結(jié)果是一樣的,都是把自己等死了就不再等了。但是這個(gè)超時(shí)時(shí)間不能當(dāng)作是你這個(gè)請(qǐng)求的超時(shí)時(shí)間,請(qǐng)注意這個(gè)概念,因?yàn)檫@個(gè)超時(shí)只是用于標(biāo)記這段時(shí)間沒有從網(wǎng)絡(luò)中獲取數(shù)據(jù),但是即使獲取數(shù)據(jù)了,那也不一定是你的,這個(gè)下面看示例就會(huì)明白。

然后就是端口問題,上面也說了你可以自己指定端口,也可以是把自己當(dāng)作客戶端,需要發(fā)送數(shù)據(jù)時(shí)就創(chuàng)建一個(gè)連接對(duì)象然后發(fā)送數(shù)據(jù),這樣端口就是動(dòng)態(tài)的。意思就是說,只要DatagramSocket對(duì)象沒有被重新初始化或消失,那么本地打開的這個(gè)UDP端口就不會(huì)關(guān)閉。

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

然后做一個(gè)示例:

package test;
import java.io.*;
import java.net.*;
import java.util.Arrays;
/**
 * UDP客戶端程序,用于對(duì)服務(wù)端發(fā)送數(shù)據(jù),并接收服務(wù)端的回應(yīng)信息
 */
public class UdpClientSocket {
	private byte[] buffer = new byte[1024];
	private static DatagramSocket ds = null;
	/**
	 * 測(cè)試客戶端發(fā)包和接收回應(yīng)信息的方法
	 */
	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("收到數(shù)據(jù):" + Arrays.toString(bt));
			Thread.sleep(1000);
		}
	}
	/**
	 * 構(gòu)造函數(shù),創(chuàng)建UDP客戶端
	 */
	public UdpClientSocket() throws Exception {
		ds = new DatagramSocket(8899); // 邦定本地端口作為客戶端
		ds.setSoTimeout(5000);
	}
	/**
	 * 向指定的服務(wù)端發(fā)送數(shù)據(jù)信息
	 */
	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);
	}
	/**
	 * 接收從指定的服務(wù)端發(fā)回的數(shù)據(jù)
	 */
	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;
		}
	}
}

運(yùn)行一直報(bào)錯(cuò):

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發(fā)送數(shù)據(jù),可以收到:

收到數(shù)據(jù):[16, 17, 18, 19, 20]

這里示例中已經(jīng)寫明

1.本地端口是8899

2.收數(shù)超時(shí)時(shí)間是5秒

3.向本地10002端口發(fā)送了一組數(shù)據(jù),鬼知道有沒有收到

4.不斷獲取本地端口8899收到的UDP數(shù)據(jù)

然后發(fā)現(xiàn)

1.發(fā)送數(shù)據(jù)沒有報(bào)錯(cuò)

2.一直報(bào)錯(cuò)收數(shù)超時(shí)

3.使用TCPUDPDbg向8899發(fā)送數(shù)據(jù)能夠收到

總結(jié):

1.UDP能指定收數(shù)超時(shí),但是每個(gè)請(qǐng)求的超時(shí)需要自己控制

2.UDP可以邦定本地端口發(fā)數(shù),而且這個(gè)端口可以有狀態(tài)存活

3.UDP沒有狀態(tài),但是本地可以有

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

標(biāo)簽:齊齊哈爾 澳門 亳州 嘉興 拉薩 烏海 衡陽(yáng) 運(yùn)城

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《UDP DUP超時(shí)UPD端口狀態(tài)檢測(cè)代碼示例》,本文關(guān)鍵詞  UDP,DUP,超時(shí),UPD,端口,狀態(tài),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《UDP DUP超時(shí)UPD端口狀態(tài)檢測(cè)代碼示例》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于UDP DUP超時(shí)UPD端口狀態(tài)檢測(cè)代碼示例的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    巴林左旗| 建宁县| 东阳市| 嵩明县| 荔波县| 年辖:市辖区| 东城区| 汶川县| 武强县| 璧山县| 阳山县| 龙海市| 平武县| 湾仔区| 蛟河市| 康定县| 延庆县| 平舆县| 肇源县| 来宾市| 阜康市| 清徐县| 凤台县| 安丘市| 兴文县| 万盛区| 巴东县| 武冈市| 扎囊县| 和硕县| 通海县| 耒阳市| 东光县| 沾益县| 望江县| 博客| 凤庆县| 芮城县| 柳河县| 横峰县| 淮滨县|