Saya mencoba menerapkan koneksi TCP, semuanya berfungsi dengan baik dari sisi server tetapi ketika saya menjalankan program klien (dari komputer klien) saya mendapatkan kesalahan berikut:
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)
Saya mencoba mengubah nomor soket jika sedang digunakan tetapi tidak berhasil, apakah ada yang tahu apa yang menyebabkan kesalahan ini & bagaimana cara memperbaikinya.
Kode Server:
//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);
}
}
}
}
}
Kode Klien:
//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);
}
}
}
}
}
java
networking
tcp
Samantha Catania
sumber
sumber
Jawaban:
Pengecualian ini berarti bahwa tidak ada layanan mendengarkan pada IP / port yang Anda coba sambungkan:
sumber
You have not started your server
, tapi itu memang masalah bagiku!Saya akan memeriksa:
Titik awal paling sederhana adalah mencoba menghubungkan secara manual dari mesin klien menggunakan telnet atau Putty. Jika itu berhasil, maka masalahnya ada di kode klien Anda. Jika tidak, Anda perlu mencari tahu mengapa tidak. Wireshark dapat membantu Anda dalam hal ini.
sumber
Anda harus menghubungkan soket klien Anda ke ServerSocket jarak jauh. Dari pada
Socket clientSocket = new Socket("localhost", 5000);
melakukan
Socket clientSocket = new Socket(serverName, 5000);
Klien harus terhubung ke serverName yang harus cocok dengan nama atau IP kotak tempat Anda
ServerSocket
dipakai (nama harus dapat dijangkau dari mesin klien). BTW: Bukan nama yang penting, ini semua tentang alamat IP ...sumber
ServerSocket
, saya mengubah jawabannya. Namun demikian,clientSocket
masih mencoba untuk terhubunglocalhost
.Saya memiliki masalah yang sama, tetapi menjalankan Server sebelum menjalankan Klien memperbaikinya.
sumber
Satu hal yang ingin saya tambahkan ke jawaban di atas adalah pengalaman saya -
"Saya meng-host di server saya di localhost dan mencoba menghubungkannya melalui emulator android dengan menentukan URL yang tepat seperti
http://localhost/my_api/login.php
. Dan saya mendapat koneksi yang menolak kesalahan "Point to note - Ketika saya baru saja pergi ke browser di PC dan menggunakan URL yang sama (
http://localhost/my_api/login.php
) saya mendapatkan respons yang benarjadi Masalah dalam kasus saya adalah istilah
localhost
yang saya ganti dengan IP untuk server saya (karena server Anda di-host pada mesin Anda) yang membuatnya dapat dijangkau dari emulator saya pada PC yang sama.Untuk mendapatkan IP untuk mesin lokal Anda, Anda dapat menggunakan
ipconfig
perintah pada cmd Anda akan mendapatkan IPv4 sesuatu seperti 192.68.xx.yy Voila ..itu IP mesin Anda di mana Anda memiliki host server Anda. gunakan itu daripada localhosthttp://192.168.72.66/my_api/login.php
Catatan - Anda tidak akan dapat mencapai IP pribadi ini dari simpul apa pun di luar komputer ini. (Jika perlu, Anda dapat menggunakan Ngnix untuk itu)
sumber
Saya memiliki masalah yang sama dengan broker Mqtt bernama vernemq.but diselesaikan dengan menambahkan yang berikut ini.
$ sudo vmq-admin listener show
untuk menampilkan daftar o ips dan port yang diizinkan untuk vernemq
$ sudo vmq-admin listener start port=1885 -a 0.0.0.0 --mountpoint /appname --nr_of_acceptors=10 --max_connections=20000
untuk menambahkan ip dan port baru Anda. sekarang kamu harus dapat terhubung tanpa masalah.
Semoga ini bisa menyelesaikan masalah Anda.
sumber
Semoga pengalaman saya dapat bermanfaat bagi seseorang. Saya menghadapi masalah dengan jejak stack pengecualian yang sama dan saya tidak bisa memahami apa masalahnya. Server Database yang saya coba hubungkan sedang berjalan dan port terbuka dan menerima koneksi.
Masalahnya adalah dengan koneksi internet. Koneksi internet yang saya gunakan tidak diizinkan untuk terhubung ke server yang sesuai. Ketika saya mengubah detail koneksi, masalah terselesaikan.
sumber
Dalam kasus saya, saya memberi socket nama server (dalam kasus saya "raspberrypi"), dan sebagai gantinya alamat IPv4 membuatnya, atau untuk menentukan, IPv6 rusak (nama diputuskan menjadi IPv6)
sumber
Dalam kasus saya, saya harus meletakkan tanda centang
Expose daemon on tcp://localhost:2375 without TLS
di dekatdocker
pengaturan (di sisi kanan bilah tugas, klik kanandocker
, pilihsetting
)sumber
saya mendapatkan kesalahan ini karena saya menutup
ServerSocket
di dalam for loop yang mencoba menerima jumlah klien di dalamnya (saya belum selesai menerima semua clints)jadi berhati-hatilah di mana harus menutup Socket Anda
sumber
Saya memiliki masalah yang sama dan masalahnya adalah saya tidak menutup objek socket. Setelah menggunakan socket.close (); masalah terpecahkan. Kode ini berfungsi untuk saya.
ClientDemo.java
dan ServerDemo.java
sumber
Saya mengubah jaringan DNS saya dan itu memperbaiki masalah
sumber
Saya memiliki masalah yang sama, dan ternyata karena izin
catalina.out
file tidak benar. Itu tidak dapat ditulis oleh pengguna kucing jantan. Setelah saya memperbaiki izin, masalah terselesaikan. Saya mengetahui bahwa ini adalah masalah izin dari log ditomcat8-initd.log
file:/usr/sbin/tomcat8: line 40: /usr/share/tomcat8/logs/catalina.out: Permission denied
sumber
tomcat8-initd.log
file sementara output log server memiliki kesalahan yang disebutkan dalam pertanyaan.Bisa jadi ada contoh sebelumnya dari klien masih berjalan dan mendengarkan pada port 5000.
sumber
BindException
di server, bukanConnectException
di klien.