Familia de sockets basada en el tipo de red
Nombre de la familia del conector: AF_INET
(También AF_INET6 se usa para ipv6. Entre todas las familias de direcciones, AF_INET es la más utilizada. Python admite muchas familias de direcciones, pero dado que solo nos importa la programación de red, la mayoría de las veces solo usamos AF_INET)
Proceso de trabajo de socket basado en TCP
Cliente
socket () -instanciar un objeto socket
Cuando el cliente envía datos al exterior, necesita transferir la capa de transporte y la capa de transporte utiliza el protocolo TCP para establecer primero la conexión.
Debajo de la capa de aplicación se encuentran todos bajo la administración del socket, así que use el socket para conectar () para establecer una conexión
Tres cosas suceden al establecer una conexión: tres apretón de manos
send () —— Enviar datos al servidor
close () -cierra la conexión
Servidor
socket () -instanciar un objeto socket
bind () -bind IP y puerto
escuchar-escuchar solicitudes de conexión
accept () —— recupera la solicitud del grupo de semi-conexión y comienza a devolver el paquete ps: hizo tres apretones de manos con connact
close () -cierra la conexión
Basado en el protocolo TCP
Servidor
import socket
# 1.买手机
phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #流式协议=》TCP协议
# 2.绑定手机
phone.bind(('127.0.0.1',8080))
# 3.开机
phone.listen(5) # 半连接池得大小
print('服务端启动完成,监听地址为:%s%s' %('127.0.0.1',8080)) #127.0.0.1 本地回环地址
# 4.等待电话连接请求
# 加上链接循环
while True:
conn,client_addr=phone.accept()
print('客户端的ip和端口:',client_addr)
# 5.通信收、发消息
while True:
try:
data=conn.recv(1024) # 最大接收得数据量为1024Bytes,收到得是bytes类型
if len(data)==0:break
print('客户端发来的消息:',data.decode('utf-8'))
conn.send(data.upper())
except Exception:
break
# 6.关闭电话连接conn
conn.close()
Cliente
import socket
phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
phone.connect(('127.0.0.1',8080))
import time
time.sleep(5)
while True:
msg = input('请输入======>').strip()
if len(msg) == 0: continue
phone.send(msg.encode('utf-8'))
data=phone.recv(1024)
print(data.decode('utf-8'))
phone.close()
Basado en el protocolo UDP
Servidor
import socket
server=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #流式协议=》TCP协议
server.bind(('127.0.0.1',8080))
while True:
data,client_addr=server.recvfrom(1024)
print(data.upper(),client_addr)
server.close()
Cliente
import socket
client=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
while True:
msg = input('请输入======>').strip()
client.sendto(msg.encode('utf-8'),('127.0.0.1',8080))
data,server_addr=client.recvfrom(1024)
print(data.decode('utf-8'))
client.close()