只记java不一样的地方.
网络软件架构¶
CS¶
server - client模式 特指要下载APP的
BS¶
browser - Server 特指使用浏览器访问的
InetAddress¶
创建时,会根据底层是ipv4还是ipv6返回对应的子类.
它没有公开的构造函数,只能通过静态方法获取
第一个方法其实就是进行一次dns查询.
其中第二个方法:
如果局域网中没有这个主机,会返回ip
udp有关¶
发送数据¶
DatagramPacket的参数:

接收数据¶
receive是阻塞的.
组播与广播¶
我们之前写的都是单播

组播¶
其实就是同时给许多主机发送
发送端¶

接收端¶

广播¶
只需要修改单播代码的ip都行
发送端¶
tip:广播是udp独有的,tcp是没有的.
tcp有关¶
注意,只能写字节byte.
客户端¶

服务端¶

汉字乱码问题¶
我们刚才的写法,如果传递中文,会接收到乱码.这是因为tcp传递的是字节流,服务端接收的都是一个一个的字节.而中文并不是一个字节,因此服务端就解析成了乱码.因此我们可以转化成字符流
提高效率:

细节¶
事实上,客户端只需要关闭socket就行,因为socket关闭会自动关闭里面的字节流. 另外,接收方在read处会阻塞,直到发送方发送数据/结束通信.
互相通信¶
这样写是不对的,因为接收方read处会阻塞.我们需要发送端在发完后给出一个结束标记.
事实上,经常会在发完后关shutdownOutput.
多线程传输¶
手动创建线程¶
只需要修改server.创建类:
主程序:

线程池¶
