【问题标题】:UDP client and server connectionUDP客户端和服务器连接
【发布时间】:2014-04-17 20:59:11
【问题描述】:

我目前正在编写两个 java 类(客户端和服务器)。客户端采用输入数字形式的键盘并将其发送到服务器。然后服务器将此数字乘以 2 并将其发送回客户端。这些数字也应该一路打印到屏幕上,例如,如果我输入数字 3,我应该得到 ​​p>

“来自客户:3” “来自服务器:6”

除非客户端收到负数,例如数字 -3 被发送到服务器并返回 -6,否则它们应该持续执行此操作。

到目前为止,我对这两个类的代码是:

 import java.io.*;
 import java.net.*;
 import java.nio.ByteBuffer;
 import java.util.Scanner;

 class Client {
   public static void main(String args[]) throws Exception 
  {  
    DatagramSocket clientSocket = new DatagramSocket();

    System.out.println("Insert number: ");  
    Scanner s= new Scanner(System.in);
    int num = s.nextInt();

    byte[] sendData = ByteBuffer.allocate(4).putInt(num).array();
    InetAddress IPAddress = InetAddress.getByName("localhost");
    int port = 1999;
    DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length , IPAddress ,1999);
    clientSocket.send(sendPacket);

    BufferedReader userInput = new BufferedReader(new InputStreamReader(System.in));

    byte[] receiveData = new byte[4];
    DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
    clientSocket.receive(receivePacket);

    int numberReceived = ByteBuffer.wrap(receivePacket.getData()).getInt();
    System.out.println("FROM SERVER:" + numberReceived);
    clientSocket.close();
   }
}

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.nio.ByteBuffer;


class Server {
  public static void main(String args[]) throws Exception
  {
    DatagramSocket serverSocket = new DatagramSocket(1999);
  while(true)
  {
        byte[] receiveData = new byte[4];
        DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
        serverSocket.receive(receivePacket);
        int num = ByteBuffer.wrap(receivePacket.getData()).getInt();
        System.out.println("FROM Client:" + num);

        InetAddress IPAddress = receivePacket.getAddress();
        int port = receivePacket.getPort();

        int numtosend = num * 2;
        byte[] sendData = ByteBuffer.allocate(4).putInt(numtosend).array();
        DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress,port);
        serverSocket.send(sendPacket);      
    }
  }
}

目前,当我运行程序时,我得到的只是第一次输入的数字的输出。

谁能告诉我哪里出错了?

提前非常感谢:)

【问题讨论】:

  • 好的,如果我运行服务器主方法并运行客户端第二个它说我无法运行客户端,因为“我的程序已经在运行”

标签: java udp client-server


【解决方案1】:

你的错误在于你还没有完成程序。

您的客户只读取一个号码,发送一个号码,收到一个回复​​。

你需要一个循环。

您还需要实现关于在负数上停止的部分。

【讨论】:

  • 是的,我还没有包含停止条件,因为我想检查它是否正在接收和返回数字,但它没有这样做。当我运行程序时,我得到“请输入一个数字”,然后我输入的数字被打印到屏幕上,没有别的。所以我不确定我哪里出错了。
  • 另外我正在使用 BlueJ 并通过那里进行测试 - 这会导致问题吗?不确定我应该在(mac 用户)上测试什么
  • 我已经告诉你哪里出了问题。 你需要一个循环。
猜你喜欢
  • 2012-03-27
  • 1970-01-01
  • 2016-02-16
  • 2016-09-15
  • 1970-01-01
  • 2021-01-07
  • 2011-08-15
  • 1970-01-01
  • 2015-12-31
相关资源
最近更新 更多