我想要做一个简单的客户端输入一条信息,然后发送至服务器端,然后服务器端再把该信息发回客户端并显示出来。程序有点问题,哪位将我的代码做改动。(这里没有用多线程了,因为只做了一个客户端,我现在只要了解这个问题就行了),不知道哪里出问题了,我觉得是流没有关闭,我在客户端把流关了后,服务器端能接到,但不能发回来。所以还是原样没改,同志们,帮我看哪里出问题指点一二。
Server端public class Server
{ public static void main(String[] args)
{
try
{
ServerSocket ss = new ServerSocket(9000);
boolean flag = false;
while (true)   
{
System.out.println("wait for client connect");
         Socket s = ss.accept();
         BufferedReader br = new BufferedReader(new InputStreamReader(s
.getInputStream()));
         BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s
.getOutputStream()));
         flag = true;
while(flag)
{
System.out.println("client connect");
String str = br.readLine();   //等侍读入消息
System.out.println("str = " + str);   //打印出来消息
bw.write(str);  //写回到客户端
}
}
}
catch (IOException e)
{
e.printStackTrace();
} }

}
Client端
public class Client
{ /**
 * 从键盘输入一个字符串
 */
public static String getMessage()
{
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String message = in.next();
return message;
}

public static void main(String[] args)
{
try
{
boolean flag = false;
Socket s = new Socket("localhost",9000);
flag = true;
String message = "";  //要发送的消息
BufferedWriter  bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
while(flag)
{
message = getMessage();
bw.write(message);  //从键盘得到字符串后,将其写到服务器端
System.out.println(message);
String str = br.readLine(); //等待读入服务器写回的消息
System.out.println("back str" + str);  //打印消息
}
                                     bw.close();
                                     br.close();
}
catch(IOException e)
{
e.printStackTrace();
}
}



}

解决方案 »

  1.   

    BufferedReader   in   =   new   BufferedReader(new   InputStreamReader(System.in));
    String   message   =   in.next(); 
    in.next()有这个方法吗?我用的JDK1.4没有
      

  2.   

    bw.write(message);
    后跟一个
    bw.newLine();
    发送一个换行
    另外一头才可以用readLine()读取到。否则会因为没有换行符而阻塞在那里
      

  3.   

    必须有换行符和调用了flush才能用readline读到.除非你的字符串的大小超出了缓冲区的范围.
      

  4.   

    public class Server {
    public static void main(String[] args) {
    try {
    ServerSocket ss = new ServerSocket(4000);
    boolean flag = false;
    while (true) {
    System.out.println("wait   for   client   connect ");
    Socket s = ss.accept();
    System.out.println("client   connect ");
    BufferedReader br = new BufferedReader(new InputStreamReader(s
    .getInputStream()));
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s
    .getOutputStream()));
    flag = true;
    while (flag) {
    String str = br.readLine(); //等侍读入消息 
    System.out.println("str   =   " + str); //打印出来消息 
    bw.write(str); //写回到客户端 
    bw.newLine();
    bw.flush();
    }
    bw.close();
    br.close();
    }
    } catch (IOException e) {
    e.printStackTrace();
    } }}public class Clien {
    public static String getMessage() {
    BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    String message = ((Object) in).next();
    return message;
    } public static void main(String[] args) {
    try {
    boolean flag = false;
    Socket s = new Socket("localhost", 4000);
    flag = true;
    String message = " "; //要发送的消息 
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s
    .getOutputStream()));
    BufferedReader br = new BufferedReader(new InputStreamReader(s
    .getInputStream()));
    while (flag) {
    message = getMessage();
    bw.write(message); //从键盘得到字符串后,将其写到服务器端 
    System.out.println(message);
    bw.newLine();
    bw.flush();
    String str = br.readLine(); //等待读入服务器写回的消息 
    System.out.println("back   str " + str); //打印消息 

    }
    bw.close();
    br.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }