1

クライアントサーバー、より正確にはJavaでソケットプログラミングを作成するのはこれが初めてです。 ポートを提供するサーバーを作成しています。同じシステムでいくつかのクライアントウィンドウを起動し、クライアントからメッセージを送信すると、サーバーを介して各クライアントにメッセージがブロードキャストされます。同じサーバーコードを別のシステムでLAN経由で実行しても、問題は発生しません。 データは放送されていません。以下は私のサーバーコードです-

    public void run() {
    try {
        serverSocket = new DatagramSocket(9878);
        group = InetAddress.getByName("230.0.0.1");
    } catch (SocketException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (UnknownHostException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
    while (true) {
        try {
            byte[] receiveData = new byte[1024];
            byte[] sendData = new byte[1024];
            DatagramPacket receivePacket = new DatagramPacket(receiveData,
                    receiveData.length);
            serverSocket.receive(receivePacket);
            receiveData = receivePacket.getData();

            if (receivePacket.getLength() > 0) {
                String sentence = new String(receivePacket.getData());          
                DatagramPacket packet = new DatagramPacket(sendData,
                        sendData.length, group, 9879);
                serverSocket.send(packet);
            }

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

今、私のクライアントは次の方法でサーバーにデータを送信しています-

private final void sendDatatoServer(){
         IPAddress = InetAddress.getByName("localhost");
         String sentence = strTitle+" : "+textPane.getText();
          sendData = sentence.getBytes();       
          DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 9878);
          textPane.setText("");
          try {
            clientSocket.send(sendPacket);
        } catch (IOException e1) {
            e1.printStackTrace();
        }
  }

そして再び私はこのようにサーバーから放送されたデータを読んでいます-

try {
        address = InetAddress.getByName("230.0.0.1");
        socket = new MulticastSocket(9879);
        socket.joinGroup(address);
        byte[] buf = new byte[256];
        packet = new DatagramPacket(buf, buf.length);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    runnableTask = backgroundExec.submit(new Runnable() {
        @Override
        public void run() {
            while(true){
                try {
                    socket.receive(packet);
                    String received = new String(packet.getData(), 0, packet.getLength());
                    setEditor(received);
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }            
            }
        }
    });
4

0 に答える 0