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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

未收到 java 數據報套接字(本地主機)

未收到 java 數據報套接字(本地主機)

慕沐林林 2022-08-17 17:32:43
這是一個常見問題,但我似乎無法做到這一點,這不是由于防火墻,我確保Intellij已獲得授權。UDP 發送器:public static void main(String[] args){    Timer timer = new Timer();    try {        InetAddress ip = InetAddress.getLocalHost();        int port = 9850;        byte[] buffer = new byte[100];        DatagramPacket packet = new DatagramPacket(buffer, 100, ip, port);        try {            DatagramSocket socket = new DatagramSocket(port, ip);            timer.schedule(new TimerTask() {                               @Override                               public void run() {                                   System.out.println("will send !");                                   try {                                       socket.send(packet);                                   }catch (IOException e){                                       e.printStackTrace();                                       return;                                   }                                   System.out.println("was sent !");                               }                           },500, 500);        } catch (SocketException e) {            e.printStackTrace();            return;        }    }catch (UnknownHostException e){        e.printStackTrace();        return;    }}UDP 接收器    public static void main(String[] args) {    int port = 8888;    byte[] buffer = new byte[100];    DatagramPacket packet = new DatagramPacket(buffer, 100);    try {        DatagramSocket socket = new DatagramSocket(port);        while(true) {            try {                System.out.println("ready to receive");                socket.receive(packet);                System.out.println("received a packet");            }catch (IOException e){                e.printStackTrace();                return;            }        }    }catch(SocketException e){        e.printStackTrace();        return;    }}發送數據包,發送方確實顯示“將發送/已發送”,但接收方未收到任何內容,它被阻止并且僅顯示“準備接收”ps:別介意套接字沒有關閉...
查看完整描述

2 回答

?
狐的傳說

TA貢獻1804條經驗 獲得超3個贊

仔細查看您正在使用的各種調用,因為您正在濫用它們。DatagramSocketDatagramPacket

在 Sender 程序中,您正在“構造一個數據報數據包,用于將長度的數據包發送到指定主機上的指定端口號”。然后,您將“創建一個綁定到指定本地地址的數據報套接字”。當您使用相同的端口 和 時,您實際上是將數據包發送到您列出的同一地址。lengthInetAddr

在 Receiver 程序中,您“構造[]一個數據報套接字并將其綁定到本地主機上的指定端口。這一次,您將它綁定到與要將其發送到的端口不同的端口。(8888 vs 9850 您要將數據包發送到的位置)。

對于發送方,嘗試通過調用 來創建綁定到隨機端口的套接字。對于接收方,請更改套接字,使其綁定到發送方嘗試將其發送到的相同編號端口(例如 9850)DatagramSocket()


查看完整回答
反對 回復 2022-08-17
?
鴻蒙傳說

TA貢獻1865條經驗 獲得超7個贊

您不需要使用 while(true),因為 DatagramPacket.receive 方法將阻塞,直到收到數據報。

問題的原因可能是端口從一側到另一側不同


查看完整回答
反對 回復 2022-08-17
  • 2 回答
  • 0 關注
  • 98 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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