2016-04-30 2 views
0

Я новичок в java-сокетах, я пытаюсь создать простую UDP-передачу с использованием клиент-сервера. Теперь моя проблема заключается в том, что на сервере выполняется бесконечный цикл и не отправляется клиенту. Извините, если я сделал некоторые глупые ошибки, благодаряjava сокеты UDP двунаправленный с использованием дейтаграммы

Сервер:

import java.net.*; 
import java.util.*; 


class EchoServer { 

    public static void main(String args[]) throws Exception { 

    DatagramSocket socket = new DatagramSocket(54373); 
    DatagramPacket packet = new DatagramPacket(new byte[512],512); 
    String temp = "Hello client"; 
    byte[] buffer = temp.getBytes(); 

    while (true) { 
     socket.receive(packet); 
     System.out.println("Received from client"); 

     DatagramPacket packet2 = new DatagramPacket(buffer,buffer.length,InetAddress.getByName("127.0.0.1"),54373); 
     socket.send(packet2); 
    } 
    } 
} 

Клиент:

import java.net.*; 
import java.util.*; 


class EchoClient { 
    public static void main(String args[]) throws Exception { 
    DatagramSocket socket = new DatagramSocket(); 
    socket.setSoTimeout(5000); 
    byte[] buffer = "Hello Server".getBytes(); 
    DatagramPacket packet = new DatagramPacket(buffer,buffer.length,InetAddress.getByName("127.0.0.1"),54373); 
    socket.send(packet); 

    DatagramPacket packet2 = new DatagramPacket(new byte[512],512); 
    socket.receive(packet2); 
    System.out.println("Received from server"); 
    } 
} 

Однако мой сервер может отправить оригинал "пакет" вместо packet2

ответ

0

Ваш сервер отправляет обратно к себе. Вместо того, чтобы использовать собственный номер порта при построении дейтаграммы ответа, он должен использовать тот, который уже находится в дейтаграмме запроса. И IP-адрес. На самом деле он должен просто отправить датаграмму запроса как есть, так как это эхо-сервер: нет необходимости в создании другого.

Если протокол изменяет идею, следует использовать метод setData() по запросу, чтобы поместить в него ответ, вместо того, чтобы создавать новую дейтаграмму.

Смежные вопросы