网络编程:Socket编程
网络编程三要数:
IP地址
端口
协议[TCP\ UDP]
---------------------------
IP地址: 所谓IP地址就是给每个连接在Internet上的主机分配的一个32bit地址
IPV4: 32 bit地址
IPV6: 128 bit地址
ip地址的分类:
A类 1.0.0.1---127.255.255.254
B类 128.0.0.1---191.255.255.254
C类 192.0.0.1---223.255.255.254
D类 224.0.0.1---239.255.255.254
E类 240.0.0.1---247.255.255.254
xxx.xxx.xxx.0 网络地址
xxx.xxx.xxx.255 广播地址
127.0.0.1 回环地址,可用于测试本机的网络是否有问题. ping 127.0.0.1
DOS命令 ipconfig:查看本机IP地址
IP地址的组成
IP地址 = 网络号码+主机地址
A类IP地址:第一段号码为网络号码,剩下的三段号码为本地计算机的号码
255*255*255= 16581375
B类IP地址:前二段号码为网络号码,剩下的二段号码为本地计算机的号码
255*255= 65535
C类IP地址:前三段号码为网络号码,剩下的一段号码为本地计算机的号码
255
----------------------------------
udp:
面向无连接。
不可靠。
速度快。
将数据封包传输,数据包最大64k。
举例:
聊天留言,在线视频,视频会议,发短信,邮局包裹。
tcp:
面向连接。
安全可靠
效率稍低。
通过三次握手确保连接的建立。
举例:
下载,打电话,QQ聊天(你在线吗,在线,就回应下,就开始聊天了)
----------------------------
* UDP协议的发送端
*
* 步骤:
* 1,创建Socket对象
* DatagramSocket: 此类表示用来发送和接收数据报包的套接字。
*
* 2,指定要发送的数据
* byte[] buf
* 3,要发送的数据打包
* DatagramPacket: 数据报包用来实现无连接包投递服务
* DatagramPacket(byte[] buf, int length, InetAddress address, int port)
构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。
* 4,通过Socket对象,发送数据
* public void send(DatagramPacket p) throws IOException从 此套接字发送数据报包
*
* 5,关闭Socket对象
----------
* UDP协议的接收端
*
* 步骤:
* 1,创建接收端的Socket对象
* DatagramSocket: 此类表示用来发送和接收数据报包的套接字。
* DatagramSocket(int port)
*
* 2,创建空的数据报包(空的仓库)
* DatagramPacket
* DatagramPacket(byte[] buf, int length) 构造 DatagramPacket,用来接收长度为 length 的数据包
*
* 3,接收发送过来的数据,存储到空的数据报包(空的仓库)
* public void receive(DatagramPacket p) throws IOException从此套接字接收数据报包
*
* 4,获取接收到的数据报包中的内容
* ip地址,数据内容
*
* DatagramPacket类中的方法
* public InetAddress getAddress()返回某台机器的 IP 地址,此数据报将要发往该机器或者是从该机器接收到的。
* public int getPort()返回某台远程主机的端口号,此数据报将要发往该主机或者是从该主机接收到的
* public byte[] getData() 返回数据缓冲区。
* public int getLength()返回将要发送或接收到的数据的长度。
-----------------------------------------------------
* TCP协议的客户端
*
* 1,创建客户端Socket对象
* Socket(String host, int port)
* 创建一个流套接字并将其连接到指定 IP 地址的指定端口号。
*
* 2,获取Socket对象中的IO流对象
* 3,写数据给服务器,或者从服务器中读数据
* 4,关闭客户端Socket对象
*
---------------
* TCP协议的服务器端
*
* 1,创建服务器ServerSocket对象
* ServerSocket: 此类实现服务器套接字
* ServerSocket(int port) 创建绑定到特定端口的服务器套接字。
*
2,等待客户端Socket对象,连接到服务器
public Socket accept() 等待客户端Socket连接到服务器,返回客户端Socket对象
该方法为阻塞方法,如果没有客户端Socket对象连接,一直阻塞
3,通过连接的客户端Socket对象,获取客户端发来的数据
InputStream getInputStream() 返回此套接字的输入流。
OutputStream getOutputStream() 返回此套接字的输出流
4,在服务器端进行解析,同时也可以给客户端反馈信息
5,服务器关闭(一般情况下,都不关闭)
---------------------
文件上次成功,但是服务器不知道完成了, 告诉服务器
通过Socket类中 void shutdownOutput() 禁用此套接字的输出流。
----------------------------------------------------
|
|