我是Java的新手。如果您发现这是一个非常基本的问题,请原谅我。堆栈溢出中已经有很多关于这个问题的答案,我几乎经历了我在堆栈溢出和其他一些论坛中可以获得的所有可能的帮助。不幸的是,他们都没有帮助我。
我有客户端/服务器程序,其中客户端将字符串发送到服务器,服务器只是将另一个字符串附加到客户端发送的字符串并将其发送回客户端。
服务器程序如下所示。
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class server {
public static void main(String[] args) {
try
{
ServerSocket server = new ServerSocket(7300);
Socket s = server.accept();
DataInputStream inp = new DataInputStream(s.getInputStream());
DataOutputStream out = new DataOutputStream(s.getOutputStream());
String str =inp.readUTF();
str = str+" buddy!";
out.writeUTF(str);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
客户端看起来像这样。
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.*;
public class client {
public static void main(String[] args) {
try
{
Socket s = new Socket("192.168.1.3",7300);
DataInputStream inp = new DataInputStream(s.getInputStream());
DataOutputStream out = new DataOutputStream(s.getOutputStream());
out.writeUTF("hi");
System.out.println(inp.readUTF());
Thread.sleep(2000);
out.writeUTF("hello");
System.out.println(inp.readUTF());
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
当客户端写"嗨"时一切正常,当客户端开始发送"hello"时,我收到连接重置错误。我没有犯什么错误,请帮助我解决这个问题。
我得到的错误输出如下所示。
hi buddy!
java.net.SocketException: Connection reset by peer: socket write error
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(Unknown Source)
at java.net.SocketOutputStream.write(Unknown Source)
at java.io.DataOutputStream.write(Unknown Source)
at java.io.DataOutputStream.writeUTF(Unknown Source)
at java.io.DataOutputStream.writeUTF(Unknown Source)
at sokry.client.main(client.java:18)
在您的服务器示例中,readUTF
只在 DataInputStream
上调用一次,即使客户端向DataOutputStream
写入了两次。因此,只需添加
str = inp.readUTF();
str = str + " buddy!";
out.writeUTF(str);
到您的服务器示例,在最后一个out.writeUTF(str)
之后,将解决您的问题。
对客户端文件的以下行进行评论.java try.it 将起作用
Thread.sleep(2000);
'//out.writeUTF("hello");; System.out.println(inp.readUTF());因为当您从客户端向服务器发送"hi"并且服务器给出回复时,它完成了它的工作并停止连接,但在客户端中.java您向服务器发送了另一个请求,但服务器处于静止状态。
您应该启动服务器,直到客户端完成它的工作。
希望它会等待