Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。
所以,我们无需深入理解tcp/udp协议,socket已经为我们封装好了,我们只需要遵循socket的规定去编程,写出的程序自然就是遵循tcp/udp标准的。
#--基于TCP/IP 套接字 服务端的简单实例
#tcp是基于链接的,必须先启动服务端,然后再启动客户端去链接服务端
服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端连接。在这时如果有个客户端初始化一个Socket,然后连接服务器(connect),如果连接成功,这时客户端与服务器端的连接就建立了。客户端发送数据请求,服务器端接收请求并处理请求,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接,一次交互结束
from socket import socket ip_port=("127.0.0.1",8080) buf_size=1024 tcp_server=socket(AF_INET,SOCK_STREAM) tcp_server.bind(ip_port) tcp_server.listen(5) conn,addr=tcp_server.accpet() msg=conn.recv(buf_size) print("收到客户端发送的消息",msg.decode("utf-8")) conn.send(msg.upper()) conn.close() tcp_server.close()
#基于TCP/IP 套接字 客户端的简单实例
from socket import * ip_port=("127.0.0.1",8080) buf_size=1024 tcp_client=socket(AF_INET,SOCK_STRAM) tcp_client.connect(ip_port) tcp_client.send("hello".encode("utf-8")) data=client.recv(buf_size) print("客户端收到消息",data.decode("utf-8")) tcp.client.close()
#基于UDP的套接字服务端示例
#udp是无链接的,先启动哪一端都不会报错
from socket import * ip_port=("127.0.0.1",8080) buf_size=1024 udp_server=socket(AF_INET,SOCK_DGRAM) udp_server.bind(ip_port) msg,addr=udp_server.recvfrom(buf_size) print("服务端收到消息",msg.decode("utf-8")) udp_server.sendto(msg.upper(),addr)
#基于UDP的套接字客户端示例
from socket import * ip_port=("127.0.0.1",8080) buf_size=1024 udp_client=socket(AF_INET,SOCK_DRGAM) udp_client.sendto("hello".encode("utf-8"),ip_port) data,addr=udp_client.recvfrom(bufsize) print(data.decode("utf-8"))