# ========== ======= socket
#Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。
#Socket就是一个模块,可以通过调用模块中已实现的方法建立两个进程中的通信和连节。
# 基于TCP协议的socket
# tcp是基于链接的,必须先启动服务端,然后再启动客户端去链接服务端# import socket# sk = socket.socket()# sk.bind(("127.0.0.1",8540)) #把地址绑定到套接字
# sk.listen() #监听链接
# conn,addr = sk.accept() #接受客户端链接 #三次握手
# ret = conn.recv(1024) #接受客户端信息
# print(ret) # 打印客户端信息
# conn.send(b"hi") #向客户端发送信息
# conn.close() #关闭客户端套接字
# sk.close() #关闭服务器套接字(可选)
#client 端
# import socket
# sk = socket.socket() # 创建客户套接字
# sk.connect(("127.0.0.1",8540)) #尝试连接服务器
# sk.send(b"hello!") #发送信息
# ret = sk.recv(1024) #对话 (发送/接收)
# print(ret)
# sk.close() #关闭客户套接字
# 加一条socket配置,重用ip和端口
# import socket
# from socket import SOL_SOCKET,SO_REUSEADDR
# sk = socket.socket()
# sk.setsockopt(SOL_SOCKET,SO_REUSEADDR,1) #就是它,在bind前加
#基于UDP协议的socket
#udp是无链接的,启动服务之后可以直接接受消息,不需要提前建立链接
# import socket
# udp_sk = socket.socket(type=socket.SOCK_DGRAM)# 创建一个服务器的套接字
# udp_sk.bind(("127.0.0.1",9000)) #绑定服务器套接字
# msg,addr = udp_sk.recvfrom(1024)
# print(msg)
# udp_sk.sendto(b"hi",addr) #对话(接受与发送)
# udp_sk.close() #关闭服务器套接字
# #client 端
# import socket
# udp_sk = socket.socket(type=socket.SOCK_DGRAM)
# udp_sk.sendto(b"hello",("127.0.0.1",9000)) #发送信息
# back_msg,addr = udp_sk.recvfrom(1024) #接受信息
# print(back_msg.decode("utf-8"),addr)
#udp_sk.close()