Ik ben op zoek naar een TCP-verbinding uit te voeren, alles werkt prima vanaf de kant van de server, maar toen ik de cliënt programma uit te voeren (van de client computer) krijg ik de volgende foutmelding:
java.net.ConnectException: Connection refused
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:432)
at java.net.Socket.connect(Socket.java:529)
at java.net.Socket.connect(Socket.java:478)
at java.net.Socket.<init>(Socket.java:375)
at java.net.Socket.<init>(Socket.java:189)
at TCPClient.main(TCPClient.java:13)
Ik probeerde het veranderen van het stopcontact voor het geval was het in gebruik, maar het mocht niet baten, weet iemand wat de oorzaak van deze fout & amp; hoe dit te verhelpen.
De server Code:
//TCPServer.java
import java.io.*;
import java.net.*;
class TCPServer {
public static void main(String argv[]) throws Exception {
String fromclient;
String toclient;
ServerSocket Server = new ServerSocket(5000);
System.out.println("TCPServer Waiting for client on port 5000");
while (true) {
Socket connected = Server.accept();
System.out.println(" THE CLIENT" + " " + connected.getInetAddress()
+ ":" + connected.getPort() + " IS CONNECTED ");
BufferedReader inFromUser = new BufferedReader(
new InputStreamReader(System.in));
BufferedReader inFromClient = new BufferedReader(
new InputStreamReader(connected.getInputStream()));
PrintWriter outToClient = new PrintWriter(
connected.getOutputStream(), true);
while (true) {
System.out.println("SEND(Type Q or q to Quit):");
toclient = inFromUser.readLine();
if (toclient.equals("q") || toclient.equals("Q")) {
outToClient.println(toclient);
connected.close();
break;
} else {
outToClient.println(toclient);
}
fromclient = inFromClient.readLine();
if (fromclient.equals("q") || fromclient.equals("Q")) {
connected.close();
break;
} else {
System.out.println("RECIEVED:" + fromclient);
}
}
}
}
}
De clientcode:
//TCPClient.java
import java.io.*;
import java.net.*;
class TCPClient {
public static void main(String argv[]) throws Exception {
String FromServer;
String ToServer;
Socket clientSocket = new Socket("localhost", 5000);
BufferedReader inFromUser = new BufferedReader(new InputStreamReader(
System.in));
PrintWriter outToServer = new PrintWriter(
clientSocket.getOutputStream(), true);
BufferedReader inFromServer = new BufferedReader(new InputStreamReader(
clientSocket.getInputStream()));
while (true) {
FromServer = inFromServer.readLine();
if (FromServer.equals("q") || FromServer.equals("Q")) {
clientSocket.close();
break;
} else {
System.out.println("RECIEVED:" + FromServer);
System.out.println("SEND(Type Q or q to Quit):");
ToServer = inFromUser.readLine();
if (ToServer.equals("Q") || ToServer.equals("q")) {
outToServer.println(ToServer);
clientSocket.close();
break;
} else {
outToServer.println(ToServer);
}
}
}
}
}
Antwoord 1, autoriteit 100%
Deze uitzondering betekent dat er geen service luistert op de IP/poort waarmee u verbinding probeert te maken:
- Je probeert verbinding te maken met de verkeerde IP/Host of poort.
- U heeft uw server niet gestart.
- Je server luistert niet naar verbindingen.
- Op Windows-servers is de wachtrij voor luisterachterstanden vol.
Antwoord 2, autoriteit 12%
Ik zou het volgende controleren:
- Hostnaam en poort waarmee u verbinding probeert te maken
- De serverkant is erin geslaagd om correct te beginnen met luisteren
- Er is geen firewall die de verbinding blokkeert
Het eenvoudigste startpunt is waarschijnlijk om handmatig verbinding te maken vanaf de clientcomputer met telnet of Putty. Lukt dat, dan zit het probleem in je klantcode. Als dit niet het geval is, moet u uitzoeken waaromdat niet het geval is. Wiresharkkan je hierbij helpen.
Antwoord 3, autoriteit 2%
U moet uw client-socket verbinden met de externe ServerSocket. In plaats van
Socket clientSocket = new Socket("localhost", 5000);
doe
Socket clientSocket = new Socket(serverName, 5000);
De client moet verbinding maken met serverNamedie moet overeenkomen met de naam of het IP-adres van de box waarop uw ServerSocket
is geïnstantieerd (de naam moet bereikbaar zijn vanaf de clientcomputer) . Tussen haakjes: het is niet de naam die belangrijk is, het gaat allemaal om IP-adressen…
Antwoord 4, autoriteit 2%
Ik had hetzelfde probleem, maar het uitvoeren van de server voordat de client werd uitgevoerd, loste het op.
Antwoord 5, autoriteit 2%
Een punt dat ik zou willen toevoegen aan de bovenstaande antwoorden is mijn ervaring–
“Ik hostte op mijn server op localhosten probeerde er verbinding mee te maken via een Android-emulatordoor de juiste URL op te geven, zoals http://localhost/my_api/login.php
. En ik kreeg fout verbinding geweigerd“
Opmerking –Toen ik net naar de browser op de pc ging en dezelfde URL gebruikte (http://localhost/my_api/login.php
) Ik kreeg de juiste reactie
dus het probleem in mijn geval was de term localhost
die ik heb vervangen door het IPvoor mijn server (aangezien uw server op uw computer wordt gehost) waardoor deze bereikbaar werd van mijn emulator op dezelfde pc.
Om IP voor uw lokale machine te krijgen, kunt u de opdracht ipconfig
gebruiken op cmd
je krijgt IPv4 zoiets als 192.68.xx.yy
Voila ..dat is het IP-adres van uw machine waarop uw server wordt gehost.
gebruik het dan in plaats van localhost
http://192.168.72.66/my_api/login.php
Opmerking – u kunt dit privé-IP niet bereiken vanaf een knooppunt buiten deze computer. (In het geval dat je nodig hebt, kun je Ngnix daarvoor gebruiken)
Antwoord 6
Ik had hetzelfde probleem met Mqtt broker genaamd vernemq.maar loste het op door het volgende toe te voegen.
$ sudo vmq-admin listener show
Om de lijst te tonen o ips en poorten voor Vernemq
$ sudo vmq-admin listener start port=1885 -a 0.0.0.0 --mountpoint /appname --nr_of_acceptors=10 --max_connections=20000
Om een IP en uw nieuwe poort toe te voegen. Nu zou u kunnen kunnen verbinden zonder enig probleem.
Ik hoop dat het uw probleem oplost.
Antwoord 7
Ik hoop dat mijn ervaring nuttig kan zijn voor iemand. Ik vond het probleem met dezelfde uitzonderingstacktrace en ik kon niet begrijpen wat het probleem was. De databaseserver die ik probeerde aan te sluiten was actief en de haven was open en accepteerde verbindingen.
Het probleem was met internetverbinding. De internetverbinding die ik gebruikte, was niet toegestaan om verbinding te maken met de bijbehorende server. Toen ik de verbindingsdetails heb gewijzigd, werd het probleem opgelost.
Antwoord 8
In mijn geval gaf ik het stopcontact de naam van de server (in mijn geval “Raspberrypi”) en in plaats daarvan maakte een IPv4-adres het of om op te geven dat IPv6 wordt verbroken (de naam opgelost in een IPv6)
Antwoord 9
In mijn geval moest ik een vinkje plaatsen in de buurt van Expose daemon on tcp://localhost:2375 without TLS
in docker
Instelling (aan de rechterkant van De taakbalk, met de rechtermuisknop op docker
, selecteer setting
)
Antwoord 10
Ik kreeg deze fout omdat ik ServerSocket
in een voor lus gesloten is die proberen het aantal klanten erin te accepteren (ik heb niet klaar met het accepteren van alle clints)
Wees voorzichtig met het sluiten van uw socket
Antwoord 11
Ik had hetzelfde probleem en het probleem was dat ik geen socketobject sluit. Na het gebruik van socket.close (); probleem opgelost.
Deze code werkt voor mij.
ClientDemo.java
public class ClientDemo {
public static void main(String[] args) throws UnknownHostException,
IOException {
Socket socket = new Socket("127.0.0.1", 55286);
OutputStreamWriter os = new OutputStreamWriter(socket.getOutputStream());
os.write("Santosh Karna");
os.flush();
socket.close();
}
}
en
ServerDemo.java
public class ServerDemo {
public static void main(String[] args) throws IOException {
System.out.println("server is started");
ServerSocket serverSocket= new ServerSocket(55286);
System.out.println("server is waiting");
Socket socket=serverSocket.accept();
System.out.println("Client connected");
BufferedReader reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
String str=reader.readLine();
System.out.println("Client data: "+str);
socket.close();
serverSocket.close();
}
}
Antwoord 12
Ik heb mijn DNS-netwerk gewijzigd en het probleem is opgelost
Antwoord 13
U heeft de server waarschijnlijk niet geïnitialiseerd of de client probeert verbinding te maken met de verkeerde ip/poort.
Antwoord 14
Wijzig de lokale host in uw ip-adres
localhost
//to you local ip
192.168.xxxx
Antwoord 15
Er is een servicegenaamd MySQL80die moet worden uitgevoerd om verbinding te maken met de database
voor Windows kun je er toegang toe krijgen door naar services te zoeken, zoek dan naar de MySQL80-service en zorg ervoor dat deze actief is
Antwoord 16
Het kan zijn dat er nog een voorbeeld van de klant is die nog steeds draait en op poort 5000 wordt geluisterd.
Antwoord 17
Ik had hetzelfde probleem, en het bleek te zijn aan toestemming van de catalina.out
Bestand niet correct is. Het was niet beschrijfbaar door de Tomcat-gebruiker. Zodra ik de machtigingen heb opgelost, werd het probleem opgelost. Ik moet weten dat het een machtigingen is van de logs in de tomcat8-initd.log
bestand:
/usr/sbin/tomcat8: line 40: /usr/share/tomcat8/logs/catalina.out: Permission denied