Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
简单Java网络程序_Java_String - Fatal编程技术网

简单Java网络程序

简单Java网络程序,java,string,Java,String,我是Java编程新手,我只是想让一个非常基本的网络程序正常工作 我有两个类,一个客户端和一个服务器。其思想是,客户机只需向服务器发送一条消息,然后服务器将消息转换为大写字母并发送回客户机 让服务器向客户端发送消息没有问题,问题是我似乎无法将客户端发送的消息存储在可变服务器端以进行转换,因此无法将特定消息发送回 以下是我目前的代码: 服务器端 public class Server { public static void main(String[] args) th

我是Java编程新手,我只是想让一个非常基本的网络程序正常工作

我有两个类,一个客户端和一个服务器。其思想是,客户机只需向服务器发送一条消息,然后服务器将消息转换为大写字母并发送回客户机

让服务器向客户端发送消息没有问题,问题是我似乎无法将客户端发送的消息存储在可变服务器端以进行转换,因此无法将特定消息发送回

以下是我目前的代码:

服务器端

     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();
    }
}

我认为问题可能出在“String word=inFromClient.readUTF();”中线路?有人能给我建议吗?谢谢。

您将丢弃从客户端收到的第一个数据包:

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

您正在丢弃从客户端接收的第一个数据包:

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

为什么要从服务器中的客户端读取两次,然后丢弃第一个UTF数据包?是的,您正在打印它,但随后不转换它?这里:
System.out.println(infomclient.readUTF())您放弃读入的内容。为什么您从服务器中的客户端读取两次,然后放弃第一个UTF数据包?是的,您正在打印它,但随后不转换它?这里:
System.out.println(infomclient.readUTF())您丢弃了读入的内容。哦,谢谢,这已经修复了它。我没有意识到这样做会使绳子被丢弃。谢谢。@Tom:这就像是从扫描仪上读取。一旦读入,就可以前进流的指针。如果你仔细想想,这是有道理的。这确实有道理。谢谢你。哦,谢谢,已经修好了。我没有意识到这样做会使绳子被丢弃。谢谢。@Tom:这就像是从扫描仪上读取。一旦读入,就可以前进流的指针。如果你仔细想想,这是有道理的。这确实有道理。谢谢你。