Einfache Server/Client Socket-Verbindung?
Ich Schreibe ein java-socket, wo ein server läuft und ein client verbindet sich zum server und der server Lesen kann von den Kunden Befehlszeile.
Zuerst wollte ich die Verbindung zum server, hier der code:
public class Server{
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket(10000);
} catch (IOException e) {
System.err.println("Could not listen on port: 4444.");
e.printStackTrace();
System.exit(1);
}
Socket clientSocket = null;
try {
clientSocket = serverSocket.accept();
} catch (IOException e) {
System.err.println("Accept failed.");
System.exit(1);
}
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
String inputLine, outputLine;
out.close();
in.close();
clientSocket.close();
serverSocket.close();
}
}
und hier ist mein client:
public class Client {
public static void main(String[] args) throws IOException {
Socket socket = null;
PrintWriter out = null;
BufferedReader in = null;
try {
socket = new Socket("taranis", 4444);
out = new PrintWriter(socket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
} catch (UnknownHostException e) {
System.err.println("Don't know about host: taranis.");
System.exit(1);
} catch (IOException e) {
System.err.println("Couldn't get I/O for the connection to: taranis.");
System.exit(1);
}
BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
String fromServer;
String fromUser;
while ((fromServer = in.readLine()) != null) {
System.out.println("Server: " + fromServer);
if (fromServer.equals("Bye."))
break;
fromUser = stdIn.readLine();
if (fromUser != null) {
System.out.println("Client: " + fromUser);
out.println(fromUser);
}
}
out.close();
in.close();
stdIn.close();
socket.close();
}
}
Wenn ich den server starten, bekomme ich "could not listen on port: 4444."
Warum?
UPDATE:
Recht, jetzt kann ich Sie nicht neu starten den server erneut, da bekomme ich
java.net.BindException: Address already in use: JVM_Bind
at java.net.DualStackPlainSocketImpl.bind0(Native Method)
at java.net.DualStackPlainSocketImpl.socketBind(Unknown Source)
at java.net.AbstractPlainSocketImpl.bind(Unknown Source)
at java.net.PlainSocketImpl.bind(Unknown Source)
at java.net.ServerSocket.bind(Unknown Source)
at java.net.ServerSocket.<init>(Unknown Source)
at java.net.ServerSocket.<init>(Unknown Source)
Was kann ich dagegen tun?(Ich bin mit windows7)
Prüfen, ob der port 4444 wird bereits von einigen genutzt, verarbeiten oder nutzen, einige andere Anschluss.
kk.. aber iam-hören auf 10000 und jetzt ist es genauso...
Wählen Sie einen port NICHT aus dieser Liste: en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers und versuchen Sie es erneut.
Werfen Sie einen Blick auf: stackoverflow.com/a/22079083/3315914
kk.. aber iam-hören auf 10000 und jetzt ist es genauso...
Wählen Sie einen port NICHT aus dieser Liste: en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers und versuchen Sie es erneut.
Werfen Sie einen Blick auf: stackoverflow.com/a/22079083/3315914
InformationsquelleAutor maximus | 2012-10-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
scheint es mir, dass Ihr server nicht lauscht auf port 4444 sondern lauscht auf port 10000 aber dein client versucht, eine Verbindung zum port 4444.
Zur Beantwortung Ihrer 2. problem, wenn Sie schließen Sie die Anwendung, stellen Sie sicher, dass Sie tatsächlich kündigen. manchmal, wenn Sie die Anwendung starten hast du wieder 2 ausgeführt und kann eine harte Zeit zu sehen, dass 1 die Anwendungen noch geöffnet sind.
Hoffe, dass ich geholfen, sonst bitte Antworten Sie in einem Kommentar il-check wieder auf Sie zu spät 🙂
InformationsquelleAutor Marc Rasmussen
java.net.BindException: Address already in use: JVM_Bind
kam meistens raus, wenn Sie nicht ordentlich kündigen Letzte Ausführung
wie in eclipse, wenn Sie laufen dann laufen Sie auch wieder ohne zu kündigen, müssen Sie auf "beenden", den Prozess in der Konsole.
Einfach bedeuten, dass der "Anschluss" bereits benutzt ( fast aus der gleichen Klasse gestartet )
InformationsquelleAutor Andrea Bori
Wenn Sie mit Eclipse drücken Sie einfach auf das rote Quadrat auf der Konsole Kachel, um es zu stoppen, und als Sie wieder aufnehmen können
InformationsquelleAutor Mauro de Palma
Ausnahme:
java.net.BindException: Address already in use: JVM_Bind
Die Lösung war, entfernen Sie das Projekt aus der Registerkarte "Server" und der rechten Maustaste, und führen Sie das Projekt als "Run on server". Dies Hinzugefügt, das Projekt zurück an den Tomcat 7 und ich din nicht die BindException Fehler. Dieses wurde durch schließen von eclipse haben Sie das Letzte mal verwendet, ohne zu stoppen Sie den Tomcat-server.
InformationsquelleAutor Lucky