客户端无法发送消息
Client not able to send message
这是一个简单的客户端-服务器程序,其中客户端发送文本,服务器在 console.This 上显示它是我的代码:
我的服务器
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");
}
}
异常发生在MyServerclass中的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)
A SocketException
是一个 IOException
(在 main()
方法的 throws
子句中。由于您没有正确关闭连接 reader 抛出了这个错误,它是由 Launcher 打印出来的。
如果您 close()
Socket 另一端正在读取连接时,您将不会收到此错误。例如
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
这是一个简单的客户端-服务器程序,其中客户端发送文本,服务器在 console.This 上显示它是我的代码:
我的服务器
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");
}
}
异常发生在MyServerclass中的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)
A SocketException
是一个 IOException
(在 main()
方法的 throws
子句中。由于您没有正确关闭连接 reader 抛出了这个错误,它是由 Launcher 打印出来的。
如果您 close()
Socket 另一端正在读取连接时,您将不会收到此错误。例如
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