Java客户端服务器聊天(服务器未接收字符串)

Java客户端服务器聊天(服务器未接收字符串),java,Java,尝试制作一个简单的客户端-服务器聊天程序。我已经这样做了,服务器读取一个用户输入,然后发送到客户端。然后,客户机接收并显示该信息。然后,我让客户端读取用户输入并将其发送到服务器,但服务器没有接收到它。这是我的密码: 客户: import java.lang.*; import java.io.*; import java.net.*; import java.util.Scanner; class client { public static void main(String args

尝试制作一个简单的客户端-服务器聊天程序。我已经这样做了,服务器读取一个用户输入,然后发送到客户端。然后,客户机接收并显示该信息。然后,我让客户端读取用户输入并将其发送到服务器,但服务器没有接收到它。这是我的密码:

客户:

import java.lang.*;
import java.io.*;
import java.net.*;
import java.util.Scanner;


class client {
   public static void main(String args[]) {
      try {
         Socket skt = new Socket("localhost", 1234);
         BufferedReader in = new BufferedReader(new
         InputStreamReader(skt.getInputStream()));
         System.out.print("Waiting for server to respond... \n");

         while (!in.ready()) {}
         System.out.print("Received Message: ");
         System.out.println(in.readLine()); // Read one line and output it

         System.out.print("\n");
         //in.close();

         System.out.print("Message:");
         Scanner sc = new Scanner (System.in);
         String data2 = sc.nextLine();
         PrintWriter out = new PrintWriter(skt.getOutputStream(), true);
         System.out.print("Sending Message: '" + data2 + "'\n");
         out.print(data2);
         out.close();


      }
      catch(Exception e) {
         System.out.print("Whoops! It didn't work!\n");
      }
   }
}
服务器:

import java.lang.*;
import java.io.*;
import java.net.*;
import java.util.Scanner;



class server {


   public static void main(String args[]) {

      try {
         System.out.println("Waiting for client connection...");
         ServerSocket srvr = new ServerSocket(1234);
         Socket skt = srvr.accept();
         System.out.println("Client has connected!\n");
         System.out.print("Message:");
         Scanner sc = new Scanner (System.in);
         String data = sc.nextLine();
         PrintWriter out = new PrintWriter(skt.getOutputStream(), true);
         System.out.print("Sending Message: '" + data + "'\n");
         out.print(data);

         BufferedReader in = new BufferedReader(new
         InputStreamReader(skt.getInputStream()));


         while (!in.ready()) {out.close();}      
         System.out.print("Received Message: ");
         System.out.println(in.readLine()); // Read one line and output it
         System.out.print("\n");


         //in.close();

         //in.close();
         //out.close();
         //skt.close();
         //srvr.close();
      }
      catch(Exception e) {
         System.out.print("Whoops! It didn't work!\n");
      }
   }
}
客户端和服务器都使用相同的发送/接收代码,所以我不明白服务器为什么不接收

干杯

Tom

print()发送文本,但不发送新行。请改为尝试println()

服务器上的readLine()等待新的一行,而您不发送该行


顺便说一句:我不会在.ready()中测试
这比有用的IMHO更容易让人困惑。

嗨,我已经将print()改为println(),它仍然做同样的事情。我猜你没有去掉调用.ready()的循环。;)当我把这些拿出来的时候,它就起作用了。我现在已经取出了两个循环,但它现在根本不发送!我想我同意。关闭输出后,不会发送任何内容。只使用println()而不使用in.ready()循环,这对我很有用。