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