2014-04-17 101 views
0

我目前正在编写两个java类(客户端和服务器)。客户端接收输入数字表单键盘并将其发送到服务器。服务器然后将这个数字乘以2并将其发送回客户端。这些数字也应打印沿途筛选,例如,如果我输入数字3,我应该得到UDP客户端和服务器连接

“从客户: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);  
    } 
    } 
} 

目前,当我运行程序我得到的是第一次输入的号码的输出。

有谁能告诉我我哪里出错了吗?

非常感谢提前:)

+0

确定如果我运行服务器主方法并运行客户端,它说我无法运行客户端,因为“我的程序已在运行” – naznaq

回答

0

如果你错了,是你还没有完成程序。

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

您需要一个循环。

您还需要实现有关停止负数的部分。

+0

是的,我没有包括停止条件,因为我想检查它正在接收和返回号码,但它没有这样做。 当我运行程序时,我得到“请输入一个数字”,然后我输入的数字被打印到屏幕上,没有别的。所以我不确定我要去哪里错。 – naznaq

+0

另外我正在使用BlueJ并通过那里进行测试 - 可能会导致问题吗?不知道我应该测试它(mac用户) – naznaq

+0

我已*告诉你你错误的地方。 ***你需要一个循环。*** – EJP