day36 socket套接字

基于网络类型的套接字家族

套接字家族的名字:AF_INET

(还有AF_INET6被用于ipv6,所有地址家族中,AF_INET是使用最广泛的一个,python支持很多种地址家族,但是由于我们只关心网络编程,所以大部分时候我么只使用AF_INET)

基于TCP的套接字工作过程

v2-7d4ff6c59a5201bac25926b792826a40_720w

客户端

socket() —— 实例化套接字对象

客户端往外发数据就得调传输层而传输层用的是TCP协议就得先建立连接

应用层以下又都归套接字管,所以用套接字下得connect()建立连接

建立连接发生三件事:三次握手

send()——打包数据后发送给服务端

扫描二维码关注公众号,回复: 10999038 查看本文章

close()——关闭连接

服务端

socket() —— 实例化套接字对象

bind()—— 绑定IP和端口

listen—— 监听连接请求

accept()—— 从半连接池中取出请求后开始回包 ps : 和connact一起做了三次握手

close()——关闭连接

基于TCP协议

服务端

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

客户端

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

基于UDP协议

服务端

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

客户端

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

猜你喜欢

转载自www.cnblogs.com/wjxyzs/p/12742035.html