关于java的Socket的一个问题-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

关于java的Socket的一个问题

2016-03-26 15:15:08 1917 1

服务端:

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循环那里;
主要想问一下为什么会报这样的错,改进可以不要,
但是如果我用浏览器访问这个服务器,却不会报错,这是为什么呢,
这里主要问一下为什么会出这样的错,改进可以不要。

取消 提交回答
全部回答(1)
  • 蛮大人123
    2019-07-17 19:16:18

    在你的这段代码里,犯了两个错误
    在客户端编码中,你没有关闭输出流和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而不是空字符串。
    希望你在编程的时候,养成资源释放的好习惯

    0 0
相关问答

1

回答

JAVA多线程Socket通信时遇到的问题?

2016-03-25 17:46:04 1878浏览量 回答数 1

1

回答

Java对象的访问方式中,直接指针访问方式有什么优点?

2022-04-02 19:13:15 185浏览量 回答数 1

1

回答

Java类对象可以调用静态方法么?

2022-04-02 16:36:48 717浏览量 回答数 1

1

回答

java中,实例化对象是什么意思?

2022-04-02 16:38:37 521浏览量 回答数 1

0

回答

请问java对象序列化对应用程序的性能影响会有多大,该如何进行优化?

2021-11-06 23:43:02 306浏览量 回答数 0

1

回答

请问java中将对象转换为数组性能最快方法的是什么?

2021-11-06 22:56:56 310浏览量 回答数 1

0

回答

请问java中将对象转换为布尔性能最快方法的是什么?

2021-11-06 22:54:02 334浏览量 回答数 0

0

回答

请问java中将对象转换为字节数组性能最快方法的是什么?

2021-11-12 17:22:35 342浏览量 回答数 0

1

回答

为什么在Java程序代码优化中尽量避免过多过常地创建Java对象?

2021-10-29 14:01:37 397浏览量 回答数 1

1

回答

创建一个Java对象时,执行顺序是怎样的?

2020-04-07 12:54:51 611浏览量 回答数 1
+关注
蛮大人123
我说我不帅他们就打我,还说我虚伪
0
文章
7733
问答
问答排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载