让浏览器可以访问我们的socket服务,http协议入门

2018-01-29  本文已影响374人  在路上phper
image.png

假设有下面的需求


image.png

接下来我们用代码演示一下
新建一个ServerClient.java
为了代码的封装 我们创建一个http包
里面创建一个Requester文件
目录如下


image.png
首先我们在ServerClient服务端代码写入
image.png
image.png

接下来在Requester中需要用到下面这些知识点


image.png
image.png
接下来运行一下ServerClient
image.png
然后在浏览器中输入localhost:9000 回车
image.png
从结果可以看出一直在转圈 但是并没有报错 这肯定是有问题的 而且控制台并没有输出
接下来我们解决下
在代码中加入输出信息排错
image.png
运行效果
image.png
浏览器还是一样再转
但是控制台却有输出了
image.png

这说明while循环里面的内容执行了 但是却只执行了一次 第二次卡在了read方法里面
接着改一下代码 看看读取的长度是多少


image.png
运行结果
image.png
说明了循环第一次运行完之后由于是大于0的 所以会进入第二次循环 但是浏览器发送给我们的inputStream已经完成了 再次读取的时候是读取不到的 所以会卡在read方法处
接下来修改一下Requester代码
image.png
image.png
总体代码
image.png
运行结果
image.png
可以看见 浏览器不转圈了 但是出现了无法访问此网站
是因为服务端没有发送任何内容给浏览器 而我们仅仅是读取了内容就将socket关闭了
控制台信息
image.png
接下来在服务端写入发送代码
image.png
ServerClient代码添加如下
image.png
运行结果
image.png
image.png
发现了浏览器中还是无法访问
这是因为我们服务端代码发送的内容没有包含任何http协议格式
接下来我们了解一下http协议
image.png
由协议内容可知 相应头是不会出现在页面中的 我们需要在代码中拼接http协议内容
连续的两个换行即表示响应头结束了
接下来修改一下响应代码Response
image.png
运行结果
image.png

可以看见正常运行了
但是这时如果我多次刷新浏览器页面


image.png
发现又出现无法访问了
因为socket被关掉了
接下来改一下socket服务端 ServerClient代码
image.png
死循环 不断监听socket服务
运行结果
image.png
不断刷新 也不报错
控制台输出如下
image.png
一个为请求地址 一个是默认图片
上一篇下一篇

猜你喜欢

热点阅读