服务端:
public class Server {
private ServerSocket server;
public static void main(String[] args) {
Server s=new Server();
s.start();
}
//创建客户端
private void start(){
try {
server=new ServerSocket(9999);
this.receive();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//接收数据
private void receive(){
try {
Socket socket=server.accept();
StringBuilder msg=new StringBuilder();
String str=null;
BufferedReader reader=new BufferedReader(
new InputStreamReader(socket.getInputStream()));
while((str=reader.readLine()).length()>0)
{
msg.append(str);
msg.append("\r\n");
}
System.out.println(msg.toString());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
客户端
public class Client {
public static void main(String[] args) throws IOException{
@SuppressWarnings("resource")
Socket socket=new Socket(InetAddress.getLocalHost(),9999);
BufferedWriter writer=new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream()));
writer.write("我是");
writer.newLine();
writer.flush();
}
}
错误为:
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(Unknown Source)
at java.net.SocketInputStream.read(Unknown Source)
at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
at sun.nio.cs.StreamDecoder.read(Unknown Source)
at java.io.InputStreamReader.read(Unknown Source)
at java.io.BufferedReader.fill(Unknown Source)
at java.io.BufferedReader.readLine(Unknown Source)
at java.io.BufferedReader.readLine(Unknown Source)
at 手写服务器一.Server.receive(Server.java:34)
at 手写服务器一.Server.start(Server.java:20)
at 手写服务器一.Server.main(Server.java:14)
客户端访问会报上面的错误,错误在服务端的接收数据的while循环那里;
主要想问一下为什么会报这样的错,改进可以不要,
但是如果我用浏览器访问这个服务器,却不会报错,这是为什么呢,
这里主要问一下为什么会出这样的错,改进可以不要。
在你的这段代码里,犯了两个错误
在客户端编码中,你没有关闭输出流和socket
你所得到的java.net.SocketException: Connection reset
也是因为客户端退出时,没有关闭连接引起的。 建议修改
public class Client { public static void main(String[] args) throws IOException{ Socket socket=new Socket(InetAddress.getLocalHost(),9999); BufferedWriter writer=new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())); writer.write("我是"); writer.flush(); writer.close(); socket.close(); } }
在服务端代码中,while的条件写错 错误代码:
BufferedReader reader=new BufferedReader( new InputStreamReader(socket.getInputStream())); while((str=reader.readLine()).length()>0) { msg.append(str); msg.append("\r\n"); 建议将while的循环条件改为: BufferedReader reader=new BufferedReader( new InputStreamReader(socket.getInputStream())); while((str=reader.readLine()) != null) { msg.append(str); msg.append("\r\n");
在readLine
方法中,若无内容返回null而不是空字符串。
希望你在编程的时候,养成资源释放的好习惯
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。