Java 客户端无法发送消息
这是一个简单的客户机-服务器程序,其中客户机发送文本,服务器在控制台上显示文本。这是我的代码: 我的服务器Java 客户端无法发送消息,java,sockets,client-server,Java,Sockets,Client Server,这是一个简单的客户机-服务器程序,其中客户机发送文本,服务器在控制台上显示文本。这是我的代码: 我的服务器 import java.io.*; import java.net.*; public class MyServer { public static void main(String args[]) throws IOException { ServerSocket socket=new ServerSocket(4444); Socket s=socket.accept();
import java.io.*;
import java.net.*;
public class MyServer {
public static void main(String args[]) throws IOException
{
ServerSocket socket=new ServerSocket(4444);
Socket s=socket.accept();
BufferedReader in=new BufferedReader(new InputStreamReader(s.getInputStream()));
String text;
while( (text=in.readLine())!=null)
{ System.out.println(text);
}
}
我的客户
import java.io.*;
import java.net.*;
public class MyClient {
public static void main(String args[]) throws IOException
{ Socket socket=new Socket("localhost",4444);
PrintWriter out=new PrintWriter(socket.getOutputStream());
out.println("c:/users/pinder/desktop/happy.txt");
}
}
异常发生在MyServer类中的readLine()语句中。
这是我得到的一个例外:
Exception in thread "main" java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:209)
at java.net.SocketInputStream.read(SocketInputStream.java:141)
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
at java.io.InputStreamReader.read(InputStreamReader.java:184)
at java.io.BufferedReader.fill(BufferedReader.java:161)
at java.io.BufferedReader.readLine(BufferedReader.java:324)
at java.io.BufferedReader.readLine(BufferedReader.java:389)
at networking.MyServer.main(MyServer.java:25)
SocketException
是IOException
(位于main()
方法的throws
子句中。由于未正确关闭连接,因此读取器引发了此错误,并由启动器打印
如果在另一端读取连接时关闭插座,则不会出现此错误
public class MyServer {
public static void main(String args[]) throws IOException {
try (ServerSocket socket = new ServerSocket(4444);
Socket s = socket.accept();
BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()))) {
String text;
while ((text = in.readLine()) != null) {
System.out.println(text);
}
}
}
}
public class MyClient {
public static void main(String[] args) throws IOException {
try (Socket socket = new Socket("localhost", 4444);
PrintWriter out = new PrintWriter(socket.getOutputStream())) {
out.println("c:/users/pinder/desktop/happy.txt");
}
}
}
如果我先运行MyServer,然后运行MyClient,服务器会打印
c:/users/pinder/desktop/happy.txt
关于此代码为什么不起作用的问题是离题的……程序正在做你希望它做的事情。你没有解释错误是什么。哦,真的吗?我希望它打印客户端发送的消息,但它没有。我已经正确地提过错误提示:每当你有
可关闭的资源时,你应该调用close()
如果您希望它干净地关闭并且不出现错误,请在它上面。当您出现错误时,如果不打印它,您希望Java做什么?是的,它可以工作。谢谢!