Я работаю над одноранговой системой обмена сообщениями. Я и мой коллега-разработчик тестируем отправку сообщений друг другу, используя один и тот же маршрутизатор Wi-Fi. Система работает при отправке сообщений на локальный хост, но не на IP-адреса друг друга.
Наш тест:
public class SocketTest {
private static Config conf;
public static void main(String[] args) throws FileNotFoundException {
conf = new Config();
try {
conf.readConfig();
} catch (FileNotFoundException e) {
System.out.println(SocketTest.class.getProtectionDomain().getCodeSource().getLocation());
throw new RuntimeException(e);
}
Receiver receiver = new Receiver(conf);
Sender sender = new Sender(conf);
receiver.setOpen(true);
receiver.startServer();
InetAddress toSend;
Scanner input = new Scanner(System.in);
try {
//add peer's IP from running ip addr. Google DNS server is an example IP
toSend = InetAddress.getByName("8.8.8.8");
} catch (UnknownHostException e) {
throw new RuntimeException(e);
}
while (input.hasNextLine()) {
System.out.print(">");
sender.sendMessage(input.nextLine(), toSend);
}
receiver.stopServer();
}
}
Получатель:
public class Receiver {
//Whether or not to listen on the port
private boolean open = false;
private Config conf;
private Thread serverThread;
public Receiver(Config conf) {
this.conf = conf;
}
/**
* Reads the configuration and creates a thread to manage message listening.
*
* Thread can only be stopped or updated using the appropriate provided methods.
*
* @return message listener thread
* @throws FileNotFoundException when config file cannot be found
* @see #startServer()
* @see #stopServer()
*/
private Thread serverFactory() throws FileNotFoundException {
//For loading config changes while the program is executing, kill the current server/thread and start a new one
conf.readConfig();
return new Thread(() -> {
DatagramSocket socket;
try {
socket = new DatagramSocket(conf.getPort());
} catch (SocketException e) {
Logging.log("Failed To Initialize Server Thread", Level.SEVERE, e);
throw new RuntimeException(e);
}
String messageHolder;
while (!serverThread.isInterrupted()) {
try {
byte[] buffer = new byte[conf.getMaxBytesPerMessage()];
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
socket.receive(packet);
messageHolder = new String(packet.getData(), 0, packet.getLength());
System.out.println(messageHolder);
} catch (IOException e) {
Logging.log("Failed To Receive Packets", Level.SEVERE, e);
throw new RuntimeException(e);
}
}
socket.close();
});
}
Отправитель сообщения:
public boolean sendMessage(String user_message, InetAddress IP) {
byte[] message = user_message.getBytes();
DatagramSocket outSocket;
try {
outSocket = new DatagramSocket();
outSocket.setBroadcast(true);
} catch (SocketException e) {
Logging.log("Failed To Set Up Socket", Level.SEVERE, e);
return false;
}
DatagramPacket packet = new DatagramPacket(
message,
message.length,
IP,
conf.getPort()
);
try {
outSocket.send(packet);
} catch (IOException e) {
Logging.log("Failed To Send Message", Level.SEVERE, e);
return false;
}
return true;
}
Мы также разрешили соединения TCP и UDP на порту, который мы используем (9090).
Мой брандмауэр ufw:
Status: active
To Action From
-- ------ ----
53317/udp ALLOW Anywhere
53317/tcp ALLOW Anywhere
22/tcp ALLOW Anywhere
172.17.0.1 53/udp ALLOW 172.16.0.0/12 # allow-docker-dns
25565 ALLOW Anywhere
9090/udp ALLOW Anywhere
9090 ALLOW Anywhere
53317/udp (v6) ALLOW Anywhere (v6)
53317/tcp (v6) ALLOW Anywhere (v6)
22/tcp (v6) ALLOW Anywhere (v6)
25565 (v6) ALLOW Anywhere (v6)
9090/udp (v6) ALLOW Anywhere (v6)
9090 (v6) ALLOW Anywhere (v6)
Его iptable
$ cat /etc/iptables/iptables.rules
# Generated by iptables-save v1.8.11 on Thu Feb 12 13:40:20 2026
*filter
:INPUT ACCEPT [994:510857]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1568029:240475572]
-A INPUT -p udp -m udp --dport 9090 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 9090 -j ACCEPT
COMMIT
# Completed on Thu Feb 12 13:40:20 2026
Подробнее здесь: https://stackoverflow.com/questions/798 ... -developer
Невозможно отправить UDP-пакеты соразработчику. ⇐ JAVA
Программисты JAVA общаются здесь
-
Anonymous
1770923440
Anonymous
Я работаю над одноранговой системой обмена сообщениями. Я и мой коллега-разработчик тестируем отправку сообщений друг другу, используя один и тот же маршрутизатор Wi-Fi. Система работает при отправке сообщений на локальный хост, но не на IP-адреса друг друга.
Наш тест:
public class SocketTest {
private static Config conf;
public static void main(String[] args) throws FileNotFoundException {
conf = new Config();
try {
conf.readConfig();
} catch (FileNotFoundException e) {
System.out.println(SocketTest.class.getProtectionDomain().getCodeSource().getLocation());
throw new RuntimeException(e);
}
Receiver receiver = new Receiver(conf);
Sender sender = new Sender(conf);
receiver.setOpen(true);
receiver.startServer();
InetAddress toSend;
Scanner input = new Scanner(System.in);
try {
//add peer's IP from running ip addr. Google DNS server is an example IP
toSend = InetAddress.getByName("8.8.8.8");
} catch (UnknownHostException e) {
throw new RuntimeException(e);
}
while (input.hasNextLine()) {
System.out.print(">");
sender.sendMessage(input.nextLine(), toSend);
}
receiver.stopServer();
}
}
Получатель:
public class Receiver {
//Whether or not to listen on the port
private boolean open = false;
private Config conf;
private Thread serverThread;
public Receiver(Config conf) {
this.conf = conf;
}
/**
* Reads the configuration and creates a thread to manage message listening.
*
* Thread can only be stopped or updated using the appropriate provided methods.
*
* @return message listener thread
* @throws FileNotFoundException when config file cannot be found
* @see #startServer()
* @see #stopServer()
*/
private Thread serverFactory() throws FileNotFoundException {
//For loading config changes while the program is executing, kill the current server/thread and start a new one
conf.readConfig();
return new Thread(() -> {
DatagramSocket socket;
try {
socket = new DatagramSocket(conf.getPort());
} catch (SocketException e) {
Logging.log("Failed To Initialize Server Thread", Level.SEVERE, e);
throw new RuntimeException(e);
}
String messageHolder;
while (!serverThread.isInterrupted()) {
try {
byte[] buffer = new byte[conf.getMaxBytesPerMessage()];
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
socket.receive(packet);
messageHolder = new String(packet.getData(), 0, packet.getLength());
System.out.println(messageHolder);
} catch (IOException e) {
Logging.log("Failed To Receive Packets", Level.SEVERE, e);
throw new RuntimeException(e);
}
}
socket.close();
});
}
Отправитель сообщения:
public boolean sendMessage(String user_message, InetAddress IP) {
byte[] message = user_message.getBytes();
DatagramSocket outSocket;
try {
outSocket = new DatagramSocket();
outSocket.setBroadcast(true);
} catch (SocketException e) {
Logging.log("Failed To Set Up Socket", Level.SEVERE, e);
return false;
}
DatagramPacket packet = new DatagramPacket(
message,
message.length,
IP,
conf.getPort()
);
try {
outSocket.send(packet);
} catch (IOException e) {
Logging.log("Failed To Send Message", Level.SEVERE, e);
return false;
}
return true;
}
Мы также разрешили соединения TCP и UDP на порту, который мы используем (9090).
Мой брандмауэр ufw:
Status: active
To Action From
-- ------ ----
53317/udp ALLOW Anywhere
53317/tcp ALLOW Anywhere
22/tcp ALLOW Anywhere
172.17.0.1 53/udp ALLOW 172.16.0.0/12 # allow-docker-dns
25565 ALLOW Anywhere
9090/udp ALLOW Anywhere
9090 ALLOW Anywhere
53317/udp (v6) ALLOW Anywhere (v6)
53317/tcp (v6) ALLOW Anywhere (v6)
22/tcp (v6) ALLOW Anywhere (v6)
25565 (v6) ALLOW Anywhere (v6)
9090/udp (v6) ALLOW Anywhere (v6)
9090 (v6) ALLOW Anywhere (v6)
Его iptable
$ cat /etc/iptables/iptables.rules
# Generated by iptables-save v1.8.11 on Thu Feb 12 13:40:20 2026
*filter
:INPUT ACCEPT [994:510857]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1568029:240475572]
-A INPUT -p udp -m udp --dport 9090 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 9090 -j ACCEPT
COMMIT
# Completed on Thu Feb 12 13:40:20 2026
Подробнее здесь: [url]https://stackoverflow.com/questions/79888349/cant-send-udp-packets-to-co-developer[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия