Ich versuche einen einfachen Java Client mit einem NodeJS Server zu verbinden, aber leider funktioniert das nicht so gut. Ich nahm den Client-Code aus dem Java Doc und änderte nur den Hostnamen und den Port. Jetzt läuft mein Server auf dem selben Computer wie der Client und der Port ist 4555. Wenn ich nicht den gleichen Port auf dem Client habe und der Server dann einen Fehler bekomme, habe ich das überprüft. Auch wenn ich den Hostnamen in irgendeinen willkürlichen (nicht localhost) im Klienten ändere, wird ein Fehler geworfen. Dies deutet darauf hin, dass Fehler auftreten, wenn ich keine Verbindung herstellen kann. Das lustige ist, wenn ich den Port auf 4555 und den Hostnamen auf "localhost" gesetzt habe, bekomme ich keinen dieser Fehler und mein Client funktioniert gut, was mich denken lässt, dass ich eine Verbindung bekomme, aber ich bekomme die nicht Nachricht "Client verbunden" auf meiner Serverseite. Irgendwelche Vorschläge?Sockets - Java Client und NodeJS Server
Der Server-Code:
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var port = 4555;
app.get('/', function(req, res)
{
res.sendFile(__dirname + '/index.html');
});
io.on('connection', function(socket)
{
//When I connect to to localhost:4555 through the web browser(chrome)
//this message is actually shown so the connection works there.
console.log('client connected');
});
http.listen(port, function()
{
//Message shown on program start
console.log("app running");
});
Der Client-Code:
import java.io.*;
import java.net.*;
public class Main
{
public static void main(String[] args) throws IOException
{
String hostName = "localhost";
int portNumber = 4555;
try (
Socket echoSocket = new Socket(hostName, portNumber);
PrintWriter out =
new PrintWriter(echoSocket.getOutputStream(), true);
BufferedReader in =
new BufferedReader(
new InputStreamReader(echoSocket.getInputStream()));
BufferedReader stdIn =
new BufferedReader(
new InputStreamReader(System.in))
) {
String userInput;
while ((userInput = stdIn.readLine()) != null) {
out.println(userInput);
System.out.println("echo: " + in.readLine());
}
} catch (UnknownHostException e) {
System.err.println("Don't know about host " + hostName);
System.exit(1);
} catch (IOException e) {
System.err.println("Couldn't get I/O for the connection to " +
hostName);
System.exit(1);
}
}
}
Warum verwenden Sie die ApacheHTTPClient-Bibliothek nicht, um eine Anfrage von Ihrem Java-Client zu stellen? –
Verwenden Sie eine Portnummer über 8000. – efekctive
Sie haben einen Client und einen Server. Ihr Server muss den Anschluss überwachen, mit dem der Client verbunden ist, und der Client muss eine Verbindung zu dem Anschluss herstellen, den der Server überwacht. Ansonsten habe ich keine Ahnung, welcher Fehler vom Server kommt und welcher vom Client kommt. Der Hostname ist auch nicht willkürlich, er muss zu etwas Sinnvollem aufgelöst werden. –