簡體   English   中英

Java客戶端套接字連接不起作用

[英]Java client socket connect doesn't work

因此,我正在嘗試使用此指南-> http://mrbool.com/communicating-node-js-and-java-via-sockets/33819來使Java客戶端可以連接到node.js服務器。 我遵循了所有步驟,但是當我運行代碼時,線程阻塞了。 我在nodejs服務器上有適當的事件,但是沒有收到來自Java客戶端的消息。 有誰知道為什么會這樣以及如何解決?

Node.js代碼:

var net = require('net');
var host = '127.0.0.1';
var port = 3000;
var server = net.createServer((sock) => {
    console.log("Connected " + sock.remoteAddress + ":" + sock.remotePort);
    sock.on('data', (data) => {
        console.log("Received Data")
        sock.write(data);
    })

    sock.on('close', (data) => {
        console.log('CLOSED ' + sock.remoteAddress + ":" + sock.remotePort);
    });
});

server.listen(port, host);
console.log("listening on " + host + ":" + port);

和Java客戶端:

import java.io.*;
import java.net.*;
public class Main {
    private Socket clientSocket;
    private BufferedReader input;
    private PrintWriter output;
    String hostName = "127.0.0.1";
    int port = 3000;
    public Main() {
    }

    public static void main(String[] args) {
    Main main = new Main();
    try {
        main.connect();
        String message = "test123";

        System.out.println("Sending " + message);
        String returnStr = main.echo(message);
        System.out.println(returnStr);
    } catch (UnknownHostException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
        main.getSocket().close();
        } catch (IOException e) {
        e.printStackTrace();
        }
    }
    }

    public void connect() throws UnknownHostException, IOException {
    clientSocket = new Socket(hostName, port);
    }


    public String echo(String message) throws IOException {
    try(PrintWriter out = new PrintWriter(clientSocket.getOutputStream()); 
        BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));){
        String returnStr = null;
        System.out.println("Attempting to send");
        out.print(message);
        returnStr = in.readLine();
        return returnStr;
    }
    }

    public Socket getSocket() {
    return clientSocket;
    }
}

命令提示符輸出:

listening on 127.0.0.1:3000
Connected 127.0.0.1:52572

“連接”運行良好。 問題出在其他地方。

  1. 您正在使用readLine()閱讀一行。
  2. 您沒有發送行:您正在使用print()
  3. Javascript服務器將回顯您發送的所有內容,但是直到客戶端發出請求后,它才會關閉套接字。
  4. 客戶端不會關閉套接字,因為它在readLine()被阻塞,等待行終止符,該行永遠不會發送。

使用println()代替print()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM