为什么我的ServerSocket没有显示socket的输出?

时间:2016-04-28 17:22:40

标签: java

我正在尝试通过Socket编程编写一个程序,我从中发送消息 客户端和服务器显示它们。 但是服务器只在我键入" STOP"之后才显示单词。 当我按下回车时,它没有同时显示它。

另外,为什么我必须明确写import java.net.Socket;import java.net.ServerSocket;,因为java.net.*;给了我错误。

这是我的客户代码:

import java.util.*;
import java.io.*;
import java.net.Socket;


 public class SocketTest {



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

    Socket socket = new Socket("localhost", 6666);
    OutputStreamWriter writer = new OutputStreamWriter(socket.getOutputStream());
    Scanner sc = new Scanner(System.in);
    String str = "";
    while(!(str = sc.nextLine()).equals("STOP"))
    writer.write(str);

    writer.close();
    socket.close();
  } 
}

这是我的服务器代码:

import java.util.*;
import java.net.Socket;
import java.net.ServerSocket;
import java.io.*;


public class ServerTest{



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

    ServerSocket socket = new ServerSocket(6666);
    Socket s = socket.accept();
    InputStreamReader reader = new InputStreamReader(s.getInputStream());
    Scanner sc = new Scanner(new BufferedReader(reader));
    System.out.println(sc.nextLine());
    sc.close();
    socket.close();
 }  
}

2 个答案:

答案 0 :(得分:0)

当您致电write()时,您实际上是在写缓冲区。如果缓冲区已满,它会刷新内容。在您的情况下,当您键入STOP时会刷新并调用close(),然后在关闭之前刷新。要立即写,您需要调用flush()方法。并在字符串末尾添加新行字符。

 while(!(str = sc.nextLine()).equals("STOP")) {
        writer.write(str + "\n");
        writer.flush();
    }

答案 1 :(得分:0)

你的while循环没有起始大括号。因此,while循环基本上会占用所有输入,直到输入字符串为" STOP"。

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

    Socket socket = new Socket("localhost", 6666);
    OutputStreamWriter writer = new OutputStreamWriter(socket.getOutputStream());
    Scanner sc = new Scanner(System.in);
    String str = "";
    while(!(str = sc.nextLine()).equals("STOP")){ //The while loop's starting brace is missing
    writer.write(str);

    writer.close();
    socket.close();
  } 
}

您还必须在最后为整个类定义添加另一个右括号。