Остановите и подождите UDP-сервер - PullRequest
0 голосов
/ 18 марта 2011

Я пытаюсь запрограммировать остановочный и ожидающий UDP-сервер Java и дошел до сервера, но я не уверен, куда идти дальше. Я хочу, чтобы клиент отправил сообщение на сервер, установил тайм-аут, дождался ответа, если он не получил, затем повторно отправил пакет, если это произойдет, затем увеличил последовательность до no. пока он не достигнет десяти и продолжит отправлять и получать сообщения с сервера.

Я зашел так далеко, как мне это исправить? :

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

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

    byte[] sendData = new byte[1024];
    byte[] receiveData = new byte[1024];
    InetAddress IPAddress = null;

    try {
      IPAddress = InetAddress.getByName("localhost");
    } catch (UnknownHostException exception) {
      System.err.println(exception);
    }

    //Create a datagram socket object
    DatagramSocket clientSocket = new DatagramSocket();
    while(true) {
      String sequenceNo = "0";
      sendData = sequenceNo.getBytes();
      DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 6789);
      clientSocket.send(sendPacket);
      clientSocket.setSoTimeout(1);
      DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
      if(clientSocket.receive(receivePacket)==null)
      {
       clientSocet.send(sendPacket); 
      }else { //message sent and acknowledgement received
             sequenceNo++; //increment sequence no.
        //Create a new datagram packet to get the response
      String modifiedSentence = sequenceNo;
      //Print the data on the screen
      System.out.println("From :  " + modifiedSentence);
      //Close the socket
      if(sequenceNo >= 10 ) {
        clientSocket.close();
      }
      }}}}

1 Ответ

1 голос
/ 18 марта 2011

Первая проблема, которую я вижу (кроме опечаток с именами переменных, которые остановят компиляцию кода), - это тайм-аут вашего сокета: если время ожидания сокета истечет, функция receive выдаст SocketTimeoutException, чего ваш код не делает. справиться. receive не возвращает значение , поэтому результат нельзя сравнить с null. Вместо этого вам нужно сделать что-то вроде этого:

try {
    clientSocket.receive(receivePacket);
    sequenceNo++;
    ... // rest of the success path
} catch (SocketTimeoutException ex) {
    clientSocket.send(sendPacket);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...