网络编程像是通信,通过计算机网络可以是多台计算机连接,位于同一个网络中的计算机在连接和通信时要遵守一定的规则。通信和链接被称为网络通信协议,双方要遵守规则才能完成数据交换,使用最广泛的是TCP/IP协议
一、TCP协议
TCP协议是面向连接的通信协议,就是在传输数据前先发送端和接收端建立逻辑连接,在传输数据,我们可以分为服务器和客户端。连接的创建要经过三次握手,第一次握手,客户端向服务器发出连接请求,等待服务器确认。第二次握手,服务器向客户端返回一个响应,通知客户端收到了连接请求。第三次握手,客户端再次向服务器发送确认消息,确认连接。
二、socket套接字
我们使用套接字来建立服务器和客户端的连接。建立连接我们需要指定本机的IP地址和端口,在这里端口我们可以自己定义,最大的端口是65535,最小的是0,但是有些端口是已经存在的,是不能定义的,比如redis的端口6379和HTTP协议的端口8080之类的都有过,端口只能是唯一。
server_sockket = socket(AF_INET, SOCK_STREAM)
三、阻塞和多线程
我们在建立完套接字之后要等待客户端的连接,在连接的过程中进行了一个循环在循环的过程中到达accept()时,会等到客户端连接,连接之后创建一个子线程用来接待客户端的任务,启动子线称,接待完成之后继续等待链接任务。
在下面的代码中我们使用了死循环,accept()是等待线程,Thread是多线程,里面的target是指定执行客户端的函数。
def main():
with Sock(AF_INET, SOL_SOCKET) as _sock:
_sock.bind(('0.0.0.0', 8877))
_sock.listen(1000)
print('菜狗服务器等待连接,端口号是:', 8877)
while True:
client_conn, client_info = _sock.accept()
t = Thread(target=resp_response, args=(client_conn, client_info,))
t.start()
t.join()