------- android培训、java培训、期待与您交流! ----------
一、网络通讯要素
1、ip地址
网络中的设备的标识
不易记忆,可用主机名
本地回环地址:127.0.0.1 主机名:localhost
Ip地址被封装成一个对象,在java。Net包下,简单方法如下:
2、端口号
用于标识进程的逻辑地址,不同进程的标识
3、TCP/UDP
UDP:
将数据及源和目的封装成数据包中,不需要建立连接。
每个数据包的大小限制在64K内
因无连接,是不可靠协议
不需要建立连接,速度快
TCP:
建立连接,形成传输数据的通道。
在连接中进行大量数据传输
通过三次握手完成连接,是可靠协议
必须建立连接,效率会稍低。
二、Socket
(1) DatagramSocket
1、发送端:
2、接收端:
3、结果:
1、客户端:
这里需要注意的是,当时使用BufferedWriter对Socket连接中的流进行包装时,在使用readLine方法的时候,需要手动添加行结束标记(newLine方法),并需要刷新缓冲区(flush方法)。
另:使用PrintWriter直接对Socket中的流进行包装,可以自动刷新,并且他的println方法自动带换行。(PrintWriter既可以包装字节流,也可以包装字符流)
(3) 文件上传
Client端文件若没有结束标记,即使文件上传完成了,server端的readLine方法将一直阻塞。除了使用自定义的标记外,Socket提供了关闭socket输出流、输入流的方法——shutdownOutput、shutdownInput。相当于给流加入了一个结束标记 -1。