java.net 를 참조해 주세요.Connect Exception:연결이 거부되었습니다.
TCP 접속을 실장하려고 합니다만, 서버측에서는 모든 것이 정상적으로 동작하고 있습니다만, 클라이언트 프로그램을 (클라이언트 컴퓨터에서) 실행하면, 다음의 에러가 발생합니다.
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)
소켓 번호를 사용 중인 경우에 대비하여 변경해 보았습니다만, 이 에러의 원인과 수정 방법을 아는 사람이 있습니까?
서버 코드:
//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);
}
}
}
}
}
클라이언트 코드:
//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);
}
}
}
}
}
이 예외는 접속하려고 하는 IP/포트에서 수신 중인 서비스가 없음을 의미합니다.
- 잘못된 IP/호스트 또는 포트에 연결하려고 합니다.
- 서버를 시작하지 않았습니다.
- 서버가 연결을 수신하고 있지 않습니다.
- 윈도우즈 서버에서는 수신 백로그 대기열이 가득 찼습니다.
확인해 보겠습니다.
- 연결하려는 호스트 이름 및 포트
- 서버 측에서 수신을 올바르게 개시했습니다.
- 연결을 차단하는 방화벽이 없습니다.
가장 간단한 시작점은 아마도 telnet 또는 Putty를 사용하여 클라이언트머신에서 수동으로 연결을 시도하는 것입니다.성공했을 경우는, 클라이언트 코드에 문제가 있습니다.만약 그렇지 않다면, 왜 그렇지 않은지 알아내야 합니다.Wireshark가 이 방면에서 도움이 될 것입니다.
클라이언트 소켓을 리모트 서버 소켓에 연결해야 합니다.대신
Socket clientSocket = new Socket("localhost", 5000);
하다
Socket clientSocket = new Socket(serverName, 5000);
클라이언트는 serverName에 접속해야 합니다.서버명은, 이 박스의 이름 또는 IP 에 일치합니다.ServerSocket인스턴스화되었습니다(클라이언트머신에서 이름이 도달 가능해야 합니다).중요한 건 이름이 아니라 IP 주소가 중요해
같은 문제가 있었습니다만, 클라이언트를 실행하기 전에 서버를 실행하면 수정되었습니다.
위의 답변에 덧붙이고 싶은 것은 제 경험입니다.
「로컬 호스트의 서버상에서 호스트 해, 다음과 같은 적절한 URL 를 지정하고, Android 에뮬레이터를 개입시켜 접속하려고 했습니다.http://localhost/my_api/login.php접속 거부 오류가 발생하였습니다.
주의사항 - PC에서 브라우저로 이동하여 동일한 URL을 사용했을 때(http://localhost/my_api/login.php) 올바른 답변을 받고 있었습니다.
그래서 내 경우 문제는 이 용어가localhost서버의 IP(서버가 머신상에 호스트 되고 있는 경우)로 대체하고, 같은 PC상의 에뮬레이터로부터 도달할 수 있도록 했습니다.
머신의 하려면 , 「IP」를 합니다.ipconfigcmd ", 192.68.xx.y Voila "와 "를 얻을 수.호스트 하는 머신의 입니다.를 localhost 대신 합니다.
http://192.168.72.66/my_api/login.php
참고 - 이 컴퓨터 외부의 어떤 노드에서도 이 개인 IP에 액세스할 수 없습니다.(필요한 경우 Ngnix를 사용할 수 있습니다.)
저는 버넘크라는 Mqt 브로커와 같은 문제가 있었는데, 다음 사항을 추가하여 해결했습니다.
$ sudo vmq-admin listener show
vernemq에 대해 허용된 ip 및 포트 목록 표시
$ sudo vmq-admin listener start port=1885 -a 0.0.0.0 --mountpoint /appname --nr_of_acceptors=10 --max_connections=20000
IP 및 새 포트를 추가합니다.이제 아무 문제 없이 연결할 수 있을 것입니다.
제 경험이 누군가에게 도움이 되었으면 좋겠어요.같은 예외 스택트레이스에서 문제가 발생했는데 무슨 문제인지 알 수 없었습니다.연결하려는 데이터베이스 서버가 실행 중이고 포트가 열려 있으며 연결을 수락하고 있습니다.
인터넷 접속에 문제가 발생.사용하던 인터넷 연결이 해당 서버에 연결할 수 없습니다.접속 상세 내용을 변경했더니 문제가 해결되었습니다.
이 경우는, 소켓에 서버의 이름(이 경우는 「raspberrypi」)을 붙였습니다만, IPv4 주소가 작성되었습니다(IPv6 로 해결되었습니다).
near near 근처에 체크 를 붙여야 요.Expose daemon on tcp://localhost:2375 without TLSdocker)docker을 선택합니다.setting)
는 i류는 i i i i i i i i i i i i i i i closed i i i i를 닫았기 때문에 발생하였습니다.ServerSocket내부 클라이언트의 수를 받아들이려고 하는 for 루프 내부(모든 clint의 수용을 완료하지 않았습니다)
소켓을 닫을 때 주의하십시오.
같은 문제가 발생했는데 소켓 오브젝트를 닫지 않는 것이 문제였습니다.socket.close()를 사용하면 문제가 해결됩니다.이 암호는 나에게 효과가 있다.
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();
}
}
및 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();
}
}
DNS 네트워크를 변경했더니 문제가 해결되었습니다.
서버 또는 클라이언트가 잘못된 IP/포트에 연결하려고 하는 것을 초기화하지 않았을 수 있습니다.
로컬 호스트를 IP 주소로 변경
localhost
//to you local ip
192.168.xxxx
데이터베이스에 연결하기 위해 실행해야 하는 MySQL80이라는 서비스가 있습니다.
Windows의 경우 MySQL80 서비스를 검색하여 실행 중인지 확인하는 것보다 서비스를 검색하여 액세스할 수 있습니다.
같은 에러 메세지 「java.net」를 표시했습니다.Connect Exception:연결이 거부되었습니다." (SQuirre)LSQL이 ssh 터널을 통해 postgresql 데이터베이스에 접속하려고 할 때.
터널 열기 예:
Postgresql이 있는 다람쥐의 오류 예제:
잘못된 포트에 연결하려고 했습니다.올바른 포트를 입력한 후 프로세스 실행에 성공했습니다.
이 에러를 수정하기 위한 다른 옵션은, https://stackoverflow.com/a/6876306/5857023 에서 참조해 주세요.
포트 5000에서 실행 중인 클라이언트의 이전 인스턴스가 있을 수 있습니다.
언급URL : https://stackoverflow.com/questions/6876266/java-net-connectexception-connection-refused
'source' 카테고리의 다른 글
| Vue.js 데이터 테이블이 첫 번째 열에 데이터만 표시됨 (0) | 2022.07.31 |
|---|---|
| vuex와 socketio를 사용하여 실시간 크러드를 만드는 방법 (0) | 2022.07.31 |
| 새로 고침 후 OneSignal 등록 실패 (0) | 2022.07.31 |
| Vuetify 데이터 테이블에서 슬롯을 사용하여 그룹화된 행을 스타일링하려면 어떻게 해야 합니까? (0) | 2022.07.31 |
| Java에서 바이너리 트리 다이어그램을 인쇄하는 방법 (0) | 2022.07.31 |

