Socket基础
Socket为操作系统的用户空间提供网络抽象,开发者编写的网络程序都会直接或间接的用到Socket抽象,
通过Socket抽象可以控制传输层协议TCP和UDP,甚至部分网络层协议,IP或者ICMP。
Socket使用IP地址+端口+协议的三元组唯一标识一个通信链路。
Socket TCP原语

socket():建立Socket对象。Socket是以类似文件系统的”打开、读写、关闭”的模式设计的
bind():绑定。参数中传入要绑定的IP地址和端口(0.0.0.0指定绑定所有的本机IP),listen()之前必须调用bind()操作,而客户端假设connect()之前没有调用bind(),则系统会为Socket分配一个未被占用的地址和端口
listen():监听。告诉操作系统在开始监听之前绑定的IP地址和端口
connect():客户端连接服务器,参数中需要指定服务器的地址和端口,要么完成TCP三次握手且建立连接要么连接服务器失败
accept():接收连接。如果当前客户端没有连接请求,则accept()调用会阻塞等待
send():发送数据。服务器和客户端均可调用send()向对方发送数据
recv():接收数据。服务器和客户端均可调用recv()从对方接收数据
close():关闭连接。
#tcp_server.pyimport socketimport datetimeHOST = '0.0.0.0'PORT = 3434# AF_INET说明使用IPv4地址, SOCK_STREAM指明TCPs = socket.socket(socket.AF_INET, socket.SOCK_STREAM)s.bind((HOST, PORT)) # 绑定IP与端口s.listen() # 监听while True:conn, addr = s.accept() # 接收TCP连接,并返回新的Socket对象print('Client {} connected'.format(addr)) # 输出客户端的IP地址dt = datetime.datetime.now()message = "Current time is" + str(dt)conn.send(message.encode("utf-8")) # 向客户端发送当前时间print("Sent :", message)conn.close() # 关闭连接
# tcp_client.pyimport socketHOST = '127.0.0.1'PORT = 3434s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)s.connect((HOST, PORT))print("Connect {} OK".format((HOST, PORT)))data = s.recv(1024) # 接收数据,本次接收数据的最大长度是1024print("Received:", data)s.close() # 关闭连接
先执行tcp_server.py文件,再执行tcp_client.py文件

从以上输出中已经可以看到服务器发送过来的当前时间,说明已成功进行通信了!
