socket编程初步,字节类型,流的作用

2018-01-26  本文已影响8人  在路上phper

这一章节我们学习网络编程


image.png
image.png

首先来看张图


image.png
image.png
浏览器连接我们的网站服务器(apache) 为应用层协议 其中浏览器和web服务器之间的交互就是应用层
本章我们以应用层作为背景进行学习(底层协议暂时不学)

应用层协议特征


image.png
接下来我们用代码演示一下
image.png
创建一个socket之间的连接 上图左边为服务端 右边为客户端 两边都要有socket(电话)
socket之间连接之后 要有数据的交互 仅仅是连接 没有交互应答是没什么用的
下面我们先看一下简单的明文字符串时如何交互的
image.png
接下来创建两个类 里面分别有一个入口函数
目录如下
image.png

等一会我们会分别启动这两个入口函数 变成两个程序
MyServer代码


image.png
MyClient代码
image.png
运行结果
image.png
先运行MyServer可以看见程序运行时卡住不动了 等待客户端进行连接呢
在运行MyClient
image.png
可以看见Client连接成功后很快运行结束了
在看MyClient的运行结果
image.png
读取到了客户端的数据并且运行也结束了 (因为我们在代码中手动连接完关闭了socket)
接下来我们理解几个问题
image.png
写一段测试代码
测是下字节类型数组如何和字母 字符串 中文 进行对应
在MyServer中写入
image.png
运行结果
image.png
我们在读取一些文档,数据之间进行网络传输等都是通过字节方式进行传输
为什么我们一开始读取字节数写成200呢?

因为传输过程中可能由于网速的原因 读取不了过大的字节数
下面我们理解一下字节的另一个用法
我们将读取字节改为每次读取3个字节MyServer中如下


image.png
将MyClient中发送内容改一下
image.png
注意你好后面的逗号是英文的,只占一个字节 由于默认是utf8格式 一个中文占3个字节 每次读取是每3个字节读取一下的
运行结果
image.png
可以看见逗号后面的内容显示不出来 是因为逗号只占一个字节 后面的文字都是3个字节的 前面的你好也都是三个字节的
所以后面的文字由于前面逗号占了一个字节所以输出有问题
接下来引出一个知识点
上面的代码中,我们使用到了InputStream等 stream中文意思为流
image.png
字节流 一般用于传输图像等 字符流一般用于传输纯文本
上一篇下一篇

猜你喜欢

热点阅读