有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用IP地址时,java无法写入socket

这是我的服务器的代码:

public class Server {

public static void main(String[] args) {
    new Server().go();
}

public void go() {
    try {
        @SuppressWarnings("resource")
        ServerSocket serverSocket = new ServerSocket(5000);
        while(true) {
            Socket clientSocket = serverSocket.accept();
            Thread t = new Thread(new ClientHandler(clientSocket));
            t.start();
            System.out.println("Connection");
        }
    } catch(Exception e) {
        e.printStackTrace();
    }
}

public class ClientHandler implements Runnable {
    private BufferedReader br;
    private Socket socket;
    private InputStream is;

    public ClientHandler(Socket clientSocket) {
        try {
            socket = clientSocket;
            is = socket.getInputStream();
        } catch(Exception e) {
            e.printStackTrace();
        }
    }

    public void run() {
        try {
            int k;
            while ((k = is.read()) != -1)
                System.out.print((char) k);
        } catch(Exception e) {
            e.printStackTrace();
        }
    }
}

}

这就是客户:

public class Client {

public static void main(String[] args) {
    new Client().connect();
}

public void connect() {
    try {
        Thread.sleep(100);
        Socket socket = new Socket("localhost", 5000);
        OutputStream out = socket.getOutputStream();
        out.write("Hello World!".getBytes());
        out.flush();
        System.out.println("Written");
    } catch (UnknownHostException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
}

客户端我连接到localhost,一切正常。但只要我通过IP/DynDNS地址替换“localhost”,服务器就会打印出“Connection”,但不会收到消息。但是,当我添加socket时。close(),则消息已发送。为什么我必须添加socket。如果我使用我的IP而不是“localhost”,close()可以发送消息吗? 我认为这也是我的安卓设备无法连接到服务器的原因。服务器打印出“Connection”,但我不能写消息(只要我在之后立即关闭socket,或者调用socket.shutDownOutput()。 我在路由器和防火墙上启动了端口转发,但现在我没有主意了。。。为什么我有联系却不会写

编辑:我不需要完全关闭插座,我只需要关闭PrintWriter。但为什么


共 (0) 个答案