Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 客户端无法发送消息_Java_Sockets_Client Server - Fatal编程技术网

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做什么?是的,它可以工作。谢谢!