【马士兵】笔记_Java网络编程

时间:2022-09-20 08:47:22

有道云笔记 连接:

http://note.youdao.com/noteshare?id=73a73d444af9b9165649e572f9f1feb4


----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

以下可忽略:





Java网络编程》

 

与《Java IO流》联系比较紧密。有时涉及到多线程。

 

分层思想、IPTCP/UDP编程(写法比较固定、跟IO等的结合使用)。

 

 

 

 

 

网关:连接外网与内网的计算机。IP地址(真实IP)是有限的,经常的办法是:将若干台计算机组合成一个子网,公用一个真实IP;子网的内部把虚拟IP分给计算机(虚拟IP的分配和解析与子网掩码有关)。网关一般有两块网卡。

 

UDP应用(不接受延迟的,容许少量出错的):视频直播,音频传输,网络游戏。TCP应用(不容出错的):银行。

 

编程时自定端口号时,注意两点:1024以下的不能用,随时可能被系统争用;一些著名软件的端口,如208080

注意,上面说的是TCP的端口号,实际UDP也有端口,二者可以内容一样,但是种类不同。

 

Socket编程,开发时,一般是ServerClient同时编写,互相参照;测试时,一般是先启Server,再测Client

 

 

127.0.0.1:本机IP

Client端在申请连接Server端时,只需确定Server端的端口,client端的端口是随机拿取的。

ServerSocket的编写:Server需要不间断运行,时刻等待Client的请求,所以ServerSocket时刻监听在其初始化的端口号上。accept()方法是阻塞式的。(另一个阻塞式的方法是readLine(),读取终端输入;DataInputStreamreadUTF()方法也是阻塞式的)Java1.4以前都是同步式的(阻塞),5.0以后提供了异步式的。

 

 

 

 

 

 

上例,ClientServer都在读和写,需要一个先读后写、一个先写后读。

 

UDP编程,没有ClientServer之分,只是角色上划分。

 

 

 

上例,Client端把一个字符串(String)转换成字节数组(Byte[],发给ServerServer端把接受到的字节数组存于一个DatagramPacket构建的内存区域里,然后再把它解析成字符串,打印出来。

UDP结合使用较多的IOByteArrayOutputStreamDataOutputStream等。