day36 socket

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

v2-7d4ff6c59a5201bac25926b792826a40_720w

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()

Supongo que te gusta

Origin www.cnblogs.com/wjxyzs/p/12742035.html
Recomendado
Clasificación