1.什么是计算机网络?核心关键词是什么?
2.什么是通信协议?为什么要使用通信协议?
3.什么是 TCP/IP协议?什么是三次握手和四次挥手?
4.什么是UDP?
5.什么是Socket?
6.什么是 TCP编程?
7. 什么是UDP编程?
计算机网络 = 单机 + 连接 + 互通
即计算机网络是计算机与计算机之间的互通/互联。
什么是TCP协议?
(1)TCP协议是建立在IP协议之上的。
(2)TCP协议是负责让两台计算机建立可靠的连接,目的是保证数据包按顺序到达。如果包丢了,就自动重发。
4.什么是UDP?
与TCP相反,UDP是面向无连接的协议,用UDP协议传输数据不可靠。使用UDP协议时,不需要建立连接,只需知道对方的ip地址和端口号,就可以直接发数据包。
优点是传输速度比TCP快。对于不要求可靠到达的数据而言,就可以用UDP协议。
5.什么是Socket?
Socket英文原意是孔,插座,通常也称”套接字“,用于描述ip地址和端口,它是一个通信链的句柄,可以用来实现不同的虚拟机或不同的计算机之间的通信。
为什么要使用Socket?
为了让两个程序通过网络进行通信,两者就必须使用Socket”套接字“。
在互联网上的主机上一般运行了多个服务软件,也就同时提供了多种服务。
每种服务都打开一个Socket,并绑定到一个端口上,不同的接口对应不同的服务。
Socket正如英文翻译一样,像一个多孔插座,一台计算机犹如布满多孔插座的房间,每一个插座都有一个编号,有的插座提供220伏特交流电,有的提供110伏特交流电,有的则提供有线电视节目,有的则提供电脑上网,客户软件将插头插到不同编号的插座,就可以得到不同的服务。
翻译成人话即选择接口就是选择服务。
6.什么是 TCP编程?
创建TCP连接时,主动发起连接的叫客户端,被动响应的叫服务器。比如我们在谷歌浏览器上访问CSDN网站时,我们的电脑就是客户端,浏览器会主动向CSDN网站的服务器发起连接。服务器接到了我们的连接,这是TCP连接就建立起来了,后面的通信就是发送网页内容了。
(1)创建TCP服务器的流程
(2)创建TCP客户端的流程
(3)执行TCP服务器与TCP客户端
创建TCP服务器.py
"""
创建TCP服务器的流程
1)使用socket()创建一个套接字
2)使用bind()绑定IP和port
3)使用listen()使套接字变为可被动连接
4)使用accept()等待客户端的连接
5)使用recv/send()接受发送的数据
"""
#需求:使用socket模块,通过客户端浏览器向本地服务器(ip地址为127.0.0.1)发送请求
#服务器接到请求,向浏览器发送"Hello World".
import socket#导入socket模块
host = "127.0.0.1"#自己电脑的本地主机ip
port = 8080#端口号
web = socket.socket()#创建socket对象
web.bind((host,port))#绑定端口
web.listen(5)#设置最多的连接数
print("服务器等待客户端连接......")#
#开启死循环
while True:
conn,addr = web.accept()#建立客户端连接
data = conn.recv(1024)#获取客户端请求数据
print(data)#打印接收到的数据
conn.sendall(b"HTTP/1.1 200 OK\r\n\r\nHello World")#向客户端发送数据
conn.close()#关闭连接
创建TCP客户端.py
import socket#导入socket模块
s = socket.socket()#创建TCP/IP套接字
host = "127.0.0.1"#获取主机地址
port = 8080#设置端口号
s.connect((host,port))#主动初始化TCP服务连接
send_data = input("请输入要发送的数据:")#提示用户输入数据
s.send(send_data.encode())#发送TCP数据
#接收对方发送过来的数据,最大接收1024个字节
recvData = s.recv(1024).decode()
print("接收到的数据为:",recvData)
#关闭套接字
s.close()
7. 什么是UDP编程?
(1)创建UDP服务器
(2)创建UDP客户端
(3)执行UDP服务器与UDP客户端
完整代码演示:
UDP客户端.py文件
#创建UDP客户端具体步骤如下:
"""
1.创建客户端套接字
2.发送/接收数据
3.关闭套接字
"""
import socket#导入socket模块
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)#创建UDP套接字
data = input("请输入转换的温度:单位(摄氏度)")#输入要转换的温度
s.sendto(data.encode(),("127.0.0.1",8888))#发送数据
print(s.recv(1024).decode())#打印接受的数据
s.close()#关闭套接字
创建UDP服务器.py文件
#创建UDP服务器
import socket#导入socket模块
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)#创建UDP套接字
s.bind(("127.0.0.1",8888))#绑定地址(host,port)
print("绑定UDP到8888端口")
data,addr = s.recvfrom(1024)#接受数据
data = float(data)*1.8 + 32#转换公式
send_data = "转换后的温度(单位:华氏温度):" + str(data)
print("Received from %s:%s."% addr)
s.sendto(send_data.encode(),addr)#发送给客户端
s.close()#关闭服务器套接字