用到socket时发现什么都不记得了,做一下复习。
何为计算机网络?网络的分层结构?
- 网络编程三要素
- IP
Internet Protocol(网络之间互连的协议),中文缩写为“网协”,在Java中使用InetAddress类来表示。
IP的版本:IPv4(32位)、IPv6(128位)
IP地址被分成了A、B、C、D、E五类,其中ABC为基本类
A类:10.0.0.0—10.255.255.255
B类:172.16.0.0—172.31.255.255
C类: 192.168.0.0—192.168.255.255
Window系统下查看本地IP: win+r cmd ipconfig
Linux:终端下ifconfig
- 端口
端口(port),可以认为是设备与外界通讯交流的出口,
在同一台电脑上端口不能重复,否则端口冲突。
如果我们需要自定义端口,建议使用10000以上的。
- 协议
网络协议的简称,网络协议是通信计算机双方必须共同遵从的一组约定,如怎样建立连接,怎样相互识别等。只有遵循了这个约定,计算机之间才能相互通信交流,它的三要素是:语法、语义、时序。
Http:超文本传输协议
Https:用安全套接字层传送的超文本传输协议
TCP和UDP
TCP:面向连接,传输可靠(保证数据正确性,保证数据顺序),用于大量数据,速度慢,建立连接需要开销较多(时间,系统资源)。
ServerSocket
Socket
UDP:面向非连接,传输不可靠,易掉包,用于传输少量数据,速度快。
DatagramSocket
URLConnection
- URL和URI
URI
统一资源标识符,是一个用于标识某一互联网资源名称的字符串。
协议://IP地址:端口号/资源路径
http://www.briup.com/index.php/android.html
http://www.briup.com/index.php/ios.html
URL
统一资源定位符,是互联网上标准资源的地址。
在java中,URI表示一个统一资源的标识符,不能用于定位任何资源,唯一的作用就是解析,而URL则包含了一个可以打开该资源的输入流。
可以简单理解URL是URI的特例,它们都表示一个资源路径
- socket
socket是为网络服务提供的一种机制,网络通讯的两端都有socket,网络通讯就是socket的通讯,数据在socket之间进行IO传输。
UDP传输:
DatagramSocket:UDP传输的发送和接收数据报的套接字。
(套接字是两端之间的通信端点)
DatagramPacket:数据报包的封装类。
eg:
服务端:
DatagramSocket socket=new DatagramSocket(10000);
byte[] buffer=new byte[1024];
DatagramPacket datagramPacket=new DatagramPacket(buffer, 1024);
socket.receive(datagramPacket);
System.out.println(new String(buffer, 0, datagramPacket.getLength(), "GBK"));
socket.close();
客户端:
String s = "套马的汉子你威武雄壮";
DatagramSocket socket = new DatagramSocket(20000);
DatagramPacket datagramPacket = new DatagramPacket(s.getBytes(),
s.getBytes().length, InetAddress.getLocalHost(), 10000);
socket.send(datagramPacket);
socket.close();
客户端和服务端都建立在本机上DatagramSocket,20000端口上的向10000端口上发送数据,10000接收收到后打印。一个简单的socket-UDP通讯。
TCP传输:
ServerSocket:服务端套接字
Socket:客户端套接字。
服务端:
服务端要明确它要处理的数据是从哪个端口进入 的
当有客户端访问时,需要明确是哪个客户端,可以通过accept()方法获取已连接的客户端的Socket对象,并通过该对象的IO流与客户端进行通讯。
当客户端访问结束时,关闭该客户端对象。
客户端:
在创建 Socket 对象时就需要连接指定主机。
因为TCP是面向连接的,所以在建立服务时就要有服务端存在。
连接成功之后形通道,在该通道中进行数据的传输。
eg1:
eg2:建立一个文本转换服务器,即客户端给服务端发送文本,服务端将文本转换成大写返回给客户端,要求客户端可以不断进行文本转换请求,客户端输入“over”,转换结束。