powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Простой JAVA чат
11 сообщений из 11, страница 1 из 1
Простой JAVA чат
    #38242001
Alex_kip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пишу простой чат, в котором расслыка спама осуществляется по протоколу UDP. Если отправлить сообщение, длиннее, чем предыдущее, то считывается оно с мусором
Вот как я прослушиваю порт
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
DatagramSocket listen=null;
         listen = new DatagramSocket(9999);
        byte message[]=new byte[1024];
        DatagramPacket pack=new DatagramPacket(message,message.length);
        while(true)
        {
            listen.receive(pack);
            String message_text=new String(pack.getData());
            InetAddress IP=pack.getAddress();
            stack.push(0, message_text, IP);
        }


з.ы. stack - переменная, которая содержит сообщения, которые не были обработаны
...
Рейтинг: 0 / 0
Простой JAVA чат
    #38242004
Alex_kip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если пишу так, то постоянно выскакивают исключения, то порт занятпоэтому невозможно открыть, то порт закрыт, поэтому не может считать

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
DatagramSocket listen=null;
                        while(true)
                        {
                            listen=new DatagramSocket(9999);
                            byte message[]=new byte[1024];
                            DatagramPacket pack=new DatagramPacket(message,message.length);
                            listen.receive(pack);
                                            
                            String message_text=new String(pack.getData());
                            InetAddress IP=pack.getAddress();
                            stack.push(0, message_text, IP);
                        }
                }
...
Рейтинг: 0 / 0
Простой JAVA чат
    #38242018
Лагман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
     * Receives a datagram packet from this socket. When this method
     * returns, the <code>DatagramPacket</code>'s buffer is filled with
     * the data received. The datagram packet also contains the sender's
     * IP address, and the port number on the sender's machine.
     * <p>
     * This method blocks until a datagram is received. The
     * <code>length</code> field of the datagram packet object contains
     * the length of the received message. If the message is longer than
     * the packet's length, the message is truncated.
     * <p>
     * If there is a security manager, a packet cannot be received if the
     * security manager's <code>checkAccept</code> method
     * does not allow it.
     *
...
Рейтинг: 0 / 0
Простой JAVA чат
    #38242123
Alex_kip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Т.е. как мне поступить?
...
Рейтинг: 0 / 0
Простой JAVA чат
    #38242131
Лагман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_kip,

Воспользоваться первым вариантом и
Код: java
1.
<code>length</code> field of the datagram packet object
...
Рейтинг: 0 / 0
Простой JAVA чат
    #38242138
Alex_kip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поле length у датаграммы вообще отсутствует
...
Рейтинг: 0 / 0
Простой JAVA чат
    #38242144
Alex_kip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приведу пример
создаю byte[1024]
Отправляю 1 сообщение "привет"
Проходит хорошо
Отправляю второе сообщение "сок"
Приходит "сок►ет"
...
Рейтинг: 0 / 0
Простой JAVA чат
    #38242148
Alex_kip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сообщение "сок" в 1024 байта, мне кажется, должно поместиться
Во втором примере каждый раз открываю/закрываю порт. Почему работает через раз и через какое-то время все равно исключение выдает, то не могу открыть, т.к. открыто, то не могу закрыть, т.к. закрыто.
Хотя я открываю-работаю-закрываю
...
Рейтинг: 0 / 0
Простой JAVA чат
    #38242156
Alex_kip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Решил проблему. Тупо каждый раз для массива выделяю память оператором new.
Буду непротив услышать, как можно нормально это реализовать)
...
Рейтинг: 0 / 0
Простой JAVA чат
    #38242170
avp.mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex_kipПоле length у датаграммы вообще отсутствует
DummyUDPListener
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
package dummyudplistener;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
import java.nio.charset.Charset;

public class DummyUDPListener {

    private static final Charset CHARSET_DOS = Charset.forName("cp866");

    public static void main(String[] args) throws SocketException {
        byte[] buffer = new byte[1024];
        DatagramPacket pack = new DatagramPacket(buffer, buffer.length);
        DatagramSocket receiver = new DatagramSocket(9999);
        while (true) {
            try {
                receiver.receive(pack);
                System.out.println(new String(pack.getData(), 0, pack.getLength(), CHARSET_DOS));
            } catch (Exception ex) {}
        }
    }
}

...
Рейтинг: 0 / 0
Простой JAVA чат
    #38242172
Alex_kip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо большое)
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Простой JAVA чат
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]