![](https://img.haomeiwen.com/i2509361/94023690a3cd85ac.png)
假设有下面的需求
![](https://img.haomeiwen.com/i2509361/82adade8d46ad6b1.png)
接下来我们用代码演示一下
新建一个ServerClient.java
为了代码的封装 我们创建一个http包
里面创建一个Requester文件
目录如下
![](https://img.haomeiwen.com/i2509361/89087f188b7157d2.png)
首先我们在ServerClient服务端代码写入
![](https://img.haomeiwen.com/i2509361/69c1e6a4727d61c9.png)
![](https://img.haomeiwen.com/i2509361/e613686da5a3b96f.png)
接下来在Requester中需要用到下面这些知识点
![](https://img.haomeiwen.com/i2509361/88cbc734cbbc6ebe.png)
![](https://img.haomeiwen.com/i2509361/e605ff5f10798f32.png)
接下来运行一下ServerClient
![](https://img.haomeiwen.com/i2509361/08e10f19c5a14a74.png)
然后在浏览器中输入localhost:9000 回车
![](https://img.haomeiwen.com/i2509361/0194dd225e8b06f9.png)
从结果可以看出一直在转圈 但是并没有报错 这肯定是有问题的 而且控制台并没有输出
接下来我们解决下
在代码中加入输出信息排错
![](https://img.haomeiwen.com/i2509361/7b827c7695f0c37f.png)
运行效果
![](https://img.haomeiwen.com/i2509361/f88d4477ab0305a9.png)
浏览器还是一样再转
但是控制台却有输出了
![](https://img.haomeiwen.com/i2509361/b37c48a1488318c8.png)
这说明while循环里面的内容执行了 但是却只执行了一次 第二次卡在了read方法里面
接着改一下代码 看看读取的长度是多少
![](https://img.haomeiwen.com/i2509361/fcc77fc19d19da65.png)
运行结果
![](https://img.haomeiwen.com/i2509361/007b2c5cc5d89d3f.png)
说明了循环第一次运行完之后由于是大于0的 所以会进入第二次循环 但是浏览器发送给我们的inputStream已经完成了 再次读取的时候是读取不到的 所以会卡在read方法处
接下来修改一下Requester代码
![](https://img.haomeiwen.com/i2509361/676eb46f96c972a4.png)
![](https://img.haomeiwen.com/i2509361/50b05c3a086f0367.png)
总体代码
![](https://img.haomeiwen.com/i2509361/cb1fe96a15c010a8.png)
运行结果
![](https://img.haomeiwen.com/i2509361/8b0a4b953691e45b.png)
可以看见 浏览器不转圈了 但是出现了无法访问此网站
是因为服务端没有发送任何内容给浏览器 而我们仅仅是读取了内容就将socket关闭了
控制台信息
![](https://img.haomeiwen.com/i2509361/25fbe9dc51671f18.png)
接下来在服务端写入发送代码
![](https://img.haomeiwen.com/i2509361/8d9a4fa902ab16a4.png)
ServerClient代码添加如下
![](https://img.haomeiwen.com/i2509361/6f7b67f9dc8361b3.png)
运行结果
![](https://img.haomeiwen.com/i2509361/913638a67ac1d613.png)
![](https://img.haomeiwen.com/i2509361/c7c7969a67903104.png)
发现了浏览器中还是无法访问
这是因为我们服务端代码发送的内容没有包含任何http协议格式
接下来我们了解一下http协议
![](https://img.haomeiwen.com/i2509361/b320f775e84610fe.png)
由协议内容可知 相应头是不会出现在页面中的 我们需要在代码中拼接http协议内容
连续的两个换行即表示响应头结束了
接下来修改一下响应代码Response
![](https://img.haomeiwen.com/i2509361/26310e4a6b3ec302.png)
运行结果
![](https://img.haomeiwen.com/i2509361/7e63e6da29b6a15b.png)
可以看见正常运行了
但是这时如果我多次刷新浏览器页面
![](https://img.haomeiwen.com/i2509361/83932c9eeb996837.png)
发现又出现无法访问了
因为socket被关掉了
接下来改一下socket服务端 ServerClient代码
![](https://img.haomeiwen.com/i2509361/683265d1c6025a34.png)
死循环 不断监听socket服务
运行结果
![](https://img.haomeiwen.com/i2509361/311b9f17bfc7dbe7.png)
不断刷新 也不报错
控制台输出如下
![](https://img.haomeiwen.com/i2509361/21d974436dfc2eda.png)
一个为请求地址 一个是默认图片
网友评论