so verbinden Sie zwei Computer über dasselbe Netzwerk mit java-sockets?
Ich bin nicht in der Lage, den Anschluss von zwei verschiedenen Maschinen, die über dasselbe Netzwerk mit der folgenden client-server-Programme.
der code allerdings gut läuft auf der gleichen Maschine.
Ich denke, dass in dem client-Programm geht in eine Endlosschleife kurz vor socket.accept()
;
Sie schlagen eine mögliche Lösung vor.
server.java
import java.io.*;
import java.net.*;
import java.lang.*;
class server{
public static void main(String args[]){
try{
int one,zero;
one=zero=0;
ServerSocket sock=new ServerSocket(2000);
Socket soc=sock.accept();
DataInputStream dis=new DataInputStream(soc.getInputStream());
System.out.println("Connection Established");
String msg =dis.readLine();
System.out.println("MESSAGE : "+msg);
for(int i=0;i<msg.length();i++){
if(msg.charAt(i)=='0')
zero++;
else
one++;
}
System.out.println("Ones are "+one);
System.out.println("Zeros are "+zero);
soc.close();
}
catch(IOException e){
System.out.println(e);
}
}
}
client.java
import java.io.*;
import java.net.*;
class client{
public static void main(String args[]){
try{
Socket soc=new Socket("localhost",2000);//or ipv4 address for different computers
BufferedReader is = new BufferedReader(new InputStreamReader(System.in));
PrintStream pr=new PrintStream(soc.getOutputStream());
System.out.println("Enter message..");
String msg =is.readLine();
pr.println(msg);
System.out.println("YOU ENTERED.."+msg);
soc.close();
}
catch(IOException e){
System.out.println(e);
}
}
}
- Hast du ändern Sie diese Zeile:
Socket soc=new Socket("localhost",2000);
mit der server ip? - ja. ich habe. ipconfig im cmd-> ipv4-Adresse
- Überprüfen Sie Ihre firewall-Einstellungen...
- getan. keine Probleme. es läuft in einer endlosen Schleife Socket soc=new Socket("localhost",2000);//oder ipv4-Adressen für verschiedene Rechner
- Es soll so sein, dass in dieser Zeile:
Socket soc=sock.accept();
. Wenn der client nicht verbinden, Es wird ewig warten. - naja mein client keine Verbindung möglich ist. es funktioniert immer noch nicht. wenn ich das client-Programm es nicht einmal drucken "Eingeben, Nachricht.." so gibt es einige andere Fehler, die ich Schätze. allerdings auf dem gleichen computer funktioniert es gut
- Nun, Erstens, können Sie einen ping-Befehl die andere box OK?
- Der client geht nicht 'in einer endlos-Schleife'. Es gibt keine Schleife. Nicht nur erraten. Der Kunde bekommt eine Ausnahme. Post-it, und der stack-trace, die in Ihrer Frage. Entweder hast du die Ziel-IP-Adresse der Verbindung falsch, wird der server nicht in Betrieb war, oder die Computer sind nicht auf dem gleichen Netzwerk und entweder sind Sie nicht erreichbar aus einander, oder es ist eine firewall im Weg.
- es macht ping fein mit kein Verlust. wenn ich die Linie verschieben System.aus.println("Geben Sie Nachricht.."); vor-Socket soc=new Socket("localhost",2000);//oder die ipv4-Adresse für den anderen Computer druckt die Linie. aber wenn es so ist, wie es ist in dem obigen code, wird das Programm nicht ausgeführt werden, nachdem line Socket soc=new Socket("localhost",2000);//oder ipv4-Adressen für verschiedene Rechner
- Laufen lassen für ein paar Minuten so, es kommt tatsächlich auf die 'connection timeout', dass es offensichtlich wirft schließlich, und fügen Sie die Ausnahme, die Sie hier erhielten, zu deiner Frage. Es sieht sehr wie ein firewall-Problem.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich hatte das gleiche problem und hier ist, wie ich es herausgefunden : UDP-Broadcast. Es wird damit der client eine Verbindung zum server unabhängig von seiner IP, damit Sie nicht zu fest die IP-Adresse, nur den port für UDP (siehe unten).
Hier ist, wie es funktioniert :
1.Server watch-port n
2.Client-Nachricht senden an alle port n er erreichen kann
3.Wenn eine Nachricht erreichen, server port, Server-Antwort mit dem Absender und Ihre IP-Adresse
4.Client ein socket erstellen und eine Verbindung zu der IP-Adresse bekam er vom server
Hier ist das tutorial, das hat mir geholfen : http://michieldemey.be/blog/network-discovery-using-udp-broadcast/