目录
计算机网络相关概念
IP地址
IP 地址就是标识网络中设备的一个地址,好比现实生活中的家庭地址。
IP地址的表现形式
1.ipv4:是由点分十进制组成
2.ipv6:是由冒号十六进制组成
IP地址的作用
IP 地址的作用是标识网络中唯一的一台设备的,也就是说通过IP地址能够找到网络中某台设备。
查看电脑的ip地址
打开终端
1.linux和macos输入命令:ifconfig
2.Windows输入命令:ipconfig
端口
端口是传输数据的通道。每运行一个程序都会有一个端口,想要给对应的程序发送数据,找到对应的端口即可。每一个端口都有一个端口号,想要找到端口,找到对应的端口号即可。
端口号
端口号有65536个
1.知名端口号:是指众所周知的端口号,范围从0 到 1023,这些端口号一般固定分配给一些服务,(比如21端口分配给FTP(文件传输协议)服务,22端口分配给SSH(安全外壳协议,主要用于远程连接与文件传输),25端口分配给SMTP(简单邮件传输协议)服务,80端口分配给HTTP服务,443端口分配给HTTPS服务)等等
2.动态端口号:一般程序员开发应用程序使用的端口号称为动态端口号。动态端口号的范围是从1024到65535,如果程序员开发的程序没有设置端口号,操作系统会在动态端口号这个范围随机生成一个给开发的应用程序使用。当运行一个程序默认会有一个端口号,当程序退出时,所占的端口号就会自动被释放。
计算机的传输协议
TCP协议
TCP协议(Transmission Control Protocol):它是一种面向连接的(连接,确定)、可靠的(数据100%可达。但缺点是:为了让数据100%可达,就会不停的校检,因此传输就会很慢)、基于字节流的传输层通信协议。
TCP协议的特点:
1.面向连接:通信双方必须先建立好连接,才能进行数据的传输,数据传输完成后,双方必须断开此连接,以释放系统资源。
2.可靠的:① TCP 采用发送应答机制 ②超时重传 ③错误校验 ④流量控制和阻塞管理(根据带宽情况调整传输速率,最终保证数据100%可以传输)
3.基于字节流
UDP协议
和TCP一样,都是数据传输协议,优点与TCP协议相反:速度快,但是可能会在传输过程中丢包。
对于要求速度快,不需要100%传达的(如视频通话)就可以用UDP协议。
socket套接字
是进程之间通信一个工具,好比现实生活中的插座,所有的家用电器要想工作都是基于插座进行,进程之间想要进行网络通信需要基于这个 socket。
套接字的作用
负责进程之间的网络数据传输,好比数据的搬运工。
用python开发TCP客户端
# 1.导入模块
import socket
# 2.创建套接字对象
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 3.建立和服务器端的连接
tcp_socket.connect(("192....", 8000)) # 这个IP地址就是你自己电脑的ip地址
# 4.发送数据
send_data = '你好服务器,我是客户端'
tcp_socket.send(send_data.encode('gbk'))
# 5.接收数据
recv_data = tcp_socket.recv(1024).decode('gbk')
print(f'这是服务器端发送给客户端的数据:{recv_data}')
# 6.关闭套接字
tcp_socket.close()
开发TCP服务器端
import socket
# 1.创建套接字对象
tcp_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 1.1设置端口复用
tcp_server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
# 2.绑定IP和端口
tcp_server.bind(("", 8000))
# 3.设置监听
tcp_server.listen(128)
while True:
# 4.等待客户端连接
new_socket, IP_addr = tcp_server.accept()
# 5.接收客户端数据
recv_data = new_socket.recv(1024).decode('gbk')
print(f'这是来自客户端:{IP_addr}发送过来的信息:{recv_data}')
# 6.发送给客户端数据
send_data = '我是服务器,我已经收到了你的信息!'.encode('gbk')
new_socket.send(send_data)
# 7.关闭套接字
new_socket.close()
如果运行没报错,可以用NetAssist来看看是否可以成功接收信息。
开发TCP服务器端---升级版
import socket
'''
服务器的主要功能:接收处理与客户端之间互相来信;
'''
class WebServer(object):
def __init__(self):
# 创建套接字对象
self.tcp_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 设置端口复用
self.tcp_server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
# 绑定IP和端口 设置监听
self.tcp_server.bind(("", 8000))
self.tcp_server.listen(128)
def handle_client(self, new_socket, IP_addr):
# 接收客户端数据
recv_data = new_socket.recv(1024).decode('gbk')
print(f'客户端{IP_addr}发送消息:{recv_data}')
# 发送数据给客户端
send_data = "我是客户端,我已经收到了你的消息!".encode('gbk')
new_socket.send(send_data)
# 关闭套接字
new_socket.close()
def start(self):
while True:
# 等待客户端连接
new_socket, IP_addr = self.tcp_server.accept()
# 处理客户端数据
self.handle_client(new_socket, IP_addr)
if __name__ == '__main__':
# 1.创建套接字对象,并设置端口复用; 2.绑定IP和端口; 3.设置监听;
ws = WebServer()
# 4.等待客户端连接; 处理客户端数据(5.接收; 6.发送数据; 7.关闭套接字)
ws.start()