亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

為何在客戶端創建多個DatagramSocket對象,會出現阻塞呢

package?com.test;
/*
?*?客戶端類
?*/
import?java.io.IOException;
import?java.net.DatagramPacket;
import?java.net.DatagramSocket;
import?java.net.InetAddress;
import?java.net.InetSocketAddress;
import?java.net.UnknownHostException;

public?class?UDPclient?{

	public?static?void?main(String[]?args)?throws?IOException?{
		/*
		?*?向服務端發送信息
		?*/
		//定義客戶端地址、端口和數據
		InetAddress?address=InetAddress.getLocalHost();
		int?port=8800;
		byte[]?data="user:tom;key:123".getBytes();
		//創建DatagramPacket對象,包含數據信息
		DatagramPacket?packet=new?DatagramPacket(data,?data.length,?address,?port);
		//創建DatagramSocket對象
		DatagramSocket?socket=new?DatagramSocket();
		//發送數據
		socket.send(packet);
		/*
		?*?接收服務端信息
		?*/
		//創建另一個DatagramSocket對象
		DatagramSocket?socket2=new?DatagramSocket();
		//創建數據報,用于接收信息
		byte[]?data2=new?byte[1024];
		DatagramPacket?packet2=new?DatagramPacket(data2,?data2.length);
		//接收信息
		socket2.receive(packet2);
		//輸出信息
		String?reply=new?String(data2);
		System.out.println("我是客戶端,服務器說:"+reply);
		//關閉資源
		socket.close();
		socket2.close();

	}

}


正在回答

2 回答

剛剛有點問題,應該是在37行代碼之前加一句socket2.send(packet)

0 回復 有任何疑惑可以回復我~

我沒有實際運行你的代碼,只是猜測一下:是否阻塞在代碼的第37行了呢?

第37行socket2.receive(packet2);是在接受服務端的響應,但是你的這個socket2并沒有向服務端發消息,所以也就不會收的服務端的響應。

可以嘗試在37行代碼之前加一句socket2.send(packet2);? 看看是否還阻塞。



0 回復 有任何疑惑可以回復我~
#1

LBruce

你好,請問一下,要接收服務端的響應必須得先像服務端發送消息,是這樣嗎?
2018-02-09 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

為何在客戶端創建多個DatagramSocket對象,會出現阻塞呢

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號