Anup KumarArya Ответов: 2

Я не получаю никаких сообщений от удаленной системы в программировании UDP java


Первая программа, которая работает на моем компьютере
import java.io.*;

import java.net.*;

public class NewUDP22   /*main class*/
{
    public static void main(String arg[])throws Exception
    {  

      /*calling both threads ReceiveDataClass and SendDataClass*/

              ReceiveDataClass t=new ReceiveDataClass();
              SendDataClass obj=new SendDataClass();
              t.start();/*starting threads here*/

              obj.start();
    }   
}

class ReceiveDataClass extends Thread
{
    byte receiveData[]=new byte[10024];
    DatagramSocket ds;
    DatagramPacket dp;
    public void run()
    {
        try{ 
            while(true)
            {
                //byte receiveData[]=new byte[1024];

                ds=new DatagramSocket(50000);
                dp=new DatagramPacket(receiveData,receiveData.length);
                ds.receive(dp);

                String str=new String(dp.getData());
                System.out.println("person1:      "+str);

                ds.close();
            }
        }

        catch(Exception e){}
    }
}

class SendDataClass extends Thread
{
    public void run()
    {
        try
        {
            while(true)
            {
                byte sendData[]=new byte[100924];

                DatagramPacket dp;
                InetSocketAddress sd=new InetSocketAddress("192.168.8.101",40000);

                DatagramSocket ds=new DatagramSocket();
                BufferedReader dis;

                dis = new BufferedReader(new InputStreamReader(System.in));

                String data=dis.readLine();

                System.out.println("me:    "+data);

                sendData=data.getBytes();

                dp=new DatagramPacket(sendData,sendData.length,sd);

                ds.send(dp);

                ds.close();
            }
        }
        catch(IOException e){}
    }
}

Вот вторая программа, которая работает на другой системе

import java.io.*;
import java.net.*;

public class NewUDP2   /*main class*/
{
    public static void main(String arg[])throws Exception
    {  
      /*calling both threads ReceiveDataClass and SendDataClass*/
      ReceiveDataClass t=new ReceiveDataClass();

        SendDataClass obj=new SendDataClass();
        t.start();/*starting threads here*/
        obj.start();
    }   
}

class ReceiveDataClass extends Thread
{
    byte receiveData[]=new byte[10024];
    DatagramSocket ds;
    DatagramPacket dp;

    public void run()
    {
        try
        { 
            while(true)
            {
                //byte receiveData[]=new byte[1024];
                ds=new DatagramSocket(40000);
                dp=new DatagramPacket(receiveData,receiveData.length);
                ds.receive(dp);
                String str=new String(dp.getData());
                System.out.println("person1:      "+str);

                ds.close();
           }

        }catch(Exception e){}
    }
}

class SendDataClass extends Thread
{
    public void run()
    {
        try
        {
            while(true)
            {
                byte sendData[]=new byte[100924];
                DatagramPacket dp;


                InetSocketAddress  sd=new  InetSocketAddress("192.168.8.101",50000);

                DatagramSocket ds=new DatagramSocket();

                BufferedReader dis;

                dis = new BufferedReader(new InputStreamReader(System.in));

                String data=dis.readLine();

                System.out.println("me:    "+data);

                sendData=data.getBytes();

                dp=new DatagramPacket(sendData,sendData.length,sd);

                ds.send(dp);

                ds.close();

            }
        }catch(IOException e){}
    }


Что я уже пробовал:

Когда я запускаю эту программу на двух разных системах, я могу отправить сообщение на вторую систему, и он также получает сообщение. Но когда сообщение отправляется удаленной системой в мою систему, я не могу получить никакого сообщения, даже если сообщение отправлено удаленной системой. Я испробовал все способы,какие только мог. Это для проекта в моем университете.

CHill60

Вы могли бы узнать больше о том, что происходит, если бы вы удалили пустое catch блоки-никогда просто так не" глотайте " исключения, подобные этому

2 Ответов

Рейтинг:
2

Anup KumarArya

все кодирование правильно. только я изменил ip add и самое главное всякий раз, когда вы запускаете udp-программу, просто закройте брандмауэр или любой тип антивируса, который доступен в вашей системе.
Теперь это работает


Рейтинг:
1

Jochen Arndt

Ваша система отправляет на этот адрес:

InetSocketAddress sd=new InetSocketAddress("192.168.8.101",40000);
Другая система посылает:
InetSocketAddress  sd=new  InetSocketAddress("192.168.8.101",50000);
А теперь ты его видел? Другие системы посылают данные себе на порт 50000. Вы должны указать IP-адрес вашей системы.

Обратите внимание также, что для получения было бы лучше переместить создание сокетов и закрытие сокетов из while(true) петли.