有道云笔记 连接:
http://note.youdao.com/noteshare?id=73a73d444af9b9165649e572f9f1feb4
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
以下可忽略:
《Java网络编程》
与《Java IO流》联系比较紧密。有时涉及到多线程。
分层思想、IP、TCP/UDP编程(写法比较固定、跟IO等的结合使用)。
网关:连接外网与内网的计算机。IP地址(真实IP)是有限的,经常的办法是:将若干台计算机组合成一个子网,公用一个真实IP;子网的内部把虚拟IP分给计算机(虚拟IP的分配和解析与子网掩码有关)。网关一般有两块网卡。
UDP应用(不接受延迟的,容许少量出错的):视频直播,音频传输,网络游戏。TCP应用(不容出错的):银行。
编程时自定端口号时,注意两点:1024以下的不能用,随时可能被系统争用;一些著名软件的端口,如20、8080。
注意,上面说的是TCP的端口号,实际UDP也有端口,二者可以内容一样,但是种类不同。
Socket编程,开发时,一般是Server和Client同时编写,互相参照;测试时,一般是先启Server,再测Client。
127.0.0.1:本机IP。
Client端在申请连接Server端时,只需确定Server端的端口,client端的端口是随机拿取的。
ServerSocket的编写:Server需要不间断运行,时刻等待Client的请求,所以ServerSocket时刻监听在其初始化的端口号上。accept()方法是阻塞式的。(另一个阻塞式的方法是readLine(),读取终端输入;DataInputStream的readUTF()方法也是阻塞式的)Java1.4以前都是同步式的(阻塞),5.0以后提供了异步式的。
上例,Client和Server都在读和写,需要一个先读后写、一个先写后读。
UDP编程,没有Client和Server之分,只是角色上划分。
上例,Client端把一个字符串(String)转换成字节数组(Byte[]),发给Server,Server端把接受到的字节数组存于一个DatagramPacket构建的内存区域里,然后再把它解析成字符串,打印出来。
与UDP结合使用较多的IO流:ByteArrayOutputStream、DataOutputStream等。