Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Консольный чат 
:(
    Опции темы
invis87
Дата 14.1.2010, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 1.11.2007
Где: город Королёв

Репутация: нет
Всего: нет



Всем здрасьте !
Читая про сети решил написать свой чат (консольный). Возник вопрос как разрешить отсутствие информации о длине сообщения. Вот как я его решил (привожу весь код, так как его сооовсем мало):
Код

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

class Recieve implements Runnable{
    Thread t;
    private int port;
    Recieve(int port){
        this.port = port;
        t = new Thread(this);
        t.start();
    }
    public void run() {
         try{
            DatagramSocket ds = new DatagramSocket(port);
             PrintWriter pw = new PrintWriter(new OutputStreamWriter(System.out, "Cp866"), true);
            while(true){
                DatagramPacket pak = new DatagramPacket(new byte[16],16);
                ds.receive(pak);            <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
                int size = Integer.parseInt(new String(pak.getData()).trim());
                DatagramPacket pack = new DatagramPacket(new byte[size],size);
                ds.receive(pack);           <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
                pw.println(new String(pack.getData()));
            }
        }catch(Exception e){
            System.err.println(e);
        }
    }
}

public class Sender {
    private String host;
    private int port;
    Sender(String host, int port){
        this.host = host;
        this.port = port;
    }
    private void sendMessage(String mes){
        try{
            byte[] data = mes.getBytes();
            InetAddress addr = InetAddress.getByName(host);
            DatagramPacket pack = new DatagramPacket(data, data.length, addr, port);
            DatagramSocket ds = new DatagramSocket();
            ds.send(pack);
            ds.close();
        }catch(IOException e){
            System.err.println(e);
        }
    }
    public static void main(String[] args){
        String message;
        try{
            new Recieve(Integer.parseInt(args[1]));
        }catch(IndexOutOfBoundsException IOOBE){}
        try{
            Sender sndr = new Sender (args[0], Integer.parseInt(args[1]));
            BufferedReader br = new BufferedReader(
                new InputStreamReader(System.in,"Cp866"));
            while(true){
                message=br.readLine();
                sndr.sendMessage(Integer.toString(message.length())); <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
                if (message.equals("quit") || message.equals("Quit") || message.equals("QUIT")) {br.close(); System.exit(0);}
                sndr.sendMessage(message);}<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
        }catch(IndexOutOfBoundsException IOOBE){
            System.err.println("First argument should be \"host\" and the second \"port\"");
        }catch(Exception e){
            System.err.println(e);
        }
    }
}

Может есть люди кому не лень ознакомиться и сообщить о явных ошибках ?? Ну или советы как что-нибудь можно сделать грамотнее. Заранее спасибо !

Это сообщение отредактировал(а) LSD - 24.3.2010, 17:02
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Работа с сетью | Следующая тема »


 




[ Время генерации скрипта: 0.0799 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.