线程“main”中的异常java.net.ConnectException:连接被拒绝:连接套接字编程Java
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/40361547/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Exception in thread "main" java.net.ConnectException: Connection refused: connect Socket Programming Java
提问by Silver Archer
I recently learn about Socket Programming between client and server. So I thought of doing an exercise of connecting both client and server. However, I have encountered this error message when I try to run the code: Exception in thread "main" java.net.ConnectException: Connection refused: connect
我最近学习了客户端和服务器之间的套接字编程。所以我想做一个连接客户端和服务器的练习。但是,当我尝试运行代码时遇到了此错误消息: 线程“main”中的异常java.net.ConnectException:连接被拒绝:连接
This is my client class code:
这是我的客户端类代码:
public class clientpart {
public static void main(String[]args) throws UnknownHostException, IOException {
Scanner input = new Scanner(System.in);
int port = 8080;
String host=null;
String answer; String sendMessage; String receivedMessage;
InetAddress address = InetAddress.getByName(host);
Socket socket= new Socket(address,port);
OutputStream os = socket.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(os);
BufferedWriter bw = new BufferedWriter(osw);
System.out.println("Please answered the following question: ");
System.out.println("What is the subject code for Socket Programming?");
answer = input.nextLine();
sendMessage = answer;
bw.write(sendMessage);
bw.newLine();
bw.flush();
System.out.println("Message sent to server: "+sendMessage);
InputStream is = socket.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
receivedMessage = br.readLine();
System.out.println("Message received from server : " + receivedMessage);
}
}
This is my server code:
这是我的服务器代码:
public class serverpart {
public static Socket socket;
public static void main(String[]args) throws IOException {
int port = 8080;
String answer; String returnedMessage; String reply;
ServerSocket server = new ServerSocket(port);
System.out.println("Server start at port "+port+".");
while(true)
{
socket = server.accept();
InputStream is = socket.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
answer = br.readLine();
System.out.println("Message sent from client: " + answer);
if("NET 3202".equals(answer) || "net 3202".equals(answer) || "NET3202".equals(answer) || "net3202".equals(answer)){
reply = "Correct!";
returnedMessage = reply;
}
else{
reply = "Wrong!";
returnedMessage = reply;
}
OutputStream os = socket.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(os);
BufferedWriter bw = new BufferedWriter(osw);
bw.write(returnedMessage);
bw.newLine();
System.out.println("Message replied to client: "+returnedMessage);
bw.flush();
}
}
}
The full error message is:
完整的错误信息是:
Exception in thread "main" java.net.ConnectException: Connection refused: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at java.net.Socket.connect(Socket.java:538)
at java.net.Socket.<init>(Socket.java:434)
at java.net.Socket.<init>(Socket.java:244)
at clientpart.main(clientpart.java:13)
C:\Users\PeiErn\AppData\Local\NetBeans\Cache.1\executor-snippets\run.xml:53: Java returned: 1
BUILD FAILED (total time: 1 second)
I hope someone can help me, thanks.
我希望有人可以帮助我,谢谢。
采纳答案by Nicolas Filotto
There are 2 issues in your program:
你的程序有两个问题:
- You use the port
80
which is part of the well-known portsor system ports(0 to 1023), so you need to launch your server with the admin rights or change it for8080
for example. - You forgot to call
bw.newLine()
after eachbw.write(sendMessage)
such that it waits for ever since on the other side you callbr.readLine()
which means that it waits for an entire line while you don't send the end of line characters.
- 您使用的端口
80
是众所周知的端口或系统端口(0 到 1023)的一部分,因此您需要以管理员权限启动服务器或进行更改8080
。 - 您忘记
bw.newLine()
在每个之后调用,bw.write(sendMessage)
这样它就会一直等待,因为在您调用的另一端,br.readLine()
这意味着它会等待整行,而您不发送行尾字符。
Change your code for this:
为此更改您的代码:
Server part:
服务器部分:
public class serverpart {
public static Socket socket;
public static void main(String[]args) throws IOException {
int port = 8080;
...
BufferedWriter bw = new BufferedWriter(osw);
bw.write(returnedMessage);
bw.newLine();
...
Output:
输出:
Server start at port 8080.
Accepted
Message sent from client: net3202
Message replied to client: Correct!
Client part:
客户端部分:
public class clientpart {
public static void main(String[]args) throws IOException {
Scanner input = new Scanner(System.in);
int port = 8080;
...
bw.write(sendMessage);
bw.newLine();
bw.flush();
...
Output:
输出:
Please answered the following question:
What is the subject code for Socket Programming?
net3202
Message sent to server: net3202
Message received from server : Correct!