2017-03-05 186 views
0

我是新来的Java编程,我只是想获得一个非常基本的网络程序工作。简单的Java网络程序

我有2个类,一个客​​户端和一个服务器。这个想法是客户端简单地向服务器发送消息,然后服务器将消息转换为大写并将其发送回客户端。

我没有问题让服务器向客户端发送消息,问题是我似乎无法存储客户端在可变服务器端发送的消息以便转换它,所以可以不会发回特定的消息。

这里是我到目前为止的代码:

服务器端

 public class Server { 

     public static void main(String[] args) throws IOException { 
      ServerSocket server = new ServerSocket (9091); 

      while (true) { 
       System.out.println("Waiting"); 

       //establish connection 
       Socket client = server.accept(); 
       System.out.println("Connected " + client.getInetAddress()); 


      //create IO streams 
       DataInputStream inFromClient = new DataInputStream(client.getInputStream()); 
       DataOutputStream outToClient = new DataOutputStream(client.getOutputStream()); 

       System.out.println(inFromClient.readUTF()); 

       String word = inFromClient.readUTF(); 

       outToClient.writeUTF(word.toUpperCase()); 
       client.close(); 
      } 
     } 

    } 

客户端

public class Client { 

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

     Socket server = new Socket("localhost", 9091); 

     System.out.println("Connected to " + server.getInetAddress()); 

     //create io streams 
     DataInputStream inFromServer = new DataInputStream(server.getInputStream()); 
     DataOutputStream outToServer = new DataOutputStream(server.getOutputStream()); 

     //send to server 
     outToServer.writeUTF("Message"); 

     //read from server 
     String data = inFromServer.readUTF(); 

     System.out.println("Server said \n\n" + data); 
     server.close(); 
    } 
} 

我认为这个问题可能是与“串字= inFromClient.readUTF(); “线?请有人建议吗?谢谢。

+0

你为什么要从服务器端的客户端读取两次然后丢弃第一个UTF数据包?是的,你打印它,但你然后不转换它? –

+1

这里:'System.out.println(inFromClient.readUTF());'你丢弃读入的内容。 –

回答

3

你丢弃从客户端接收第一包:

System.out.println(inFromClient.readUTF()); // This String is discarded 

String word = inFromClient.readUTF(); 

为什么不会掉这些?

String word = inFromClient.readUTF(); // save the first packet received 
System.out.println(word); // and also print it 
+0

谢谢,已经修复了。我没有意识到这个字符串被丢弃了。谢谢。 – Tom

+0

@Tom:就像从扫描仪读入。一旦你读入它,你就提前看到流的指针。如果你仔细考虑它是有道理的。 –

+0

这确实有道理。感谢那。 – Tom