socket循环接收通讯模板--day30

socket循环接收通讯模板

TCP模板
import socket

# 买手机 默认得到是一个TCP的socket
server = socket.socket()
# 两行代码的效果是一样的
# server = socket.socket(socket.AF_INET,socket.SOCK_STREAM,0)

# socket的家族 AF_INET(基于网络类型) AF_UNIX(基于文件类型)
# socket的类型:
# SOCK_STREAM 对应的是TCP SOCK_DGRAM 对应的是UDP
# 创建基于UDP的socket
# server = socket.socket(socket.AF_INET,socket.SOCK_DGRAM,0)


server.bind(("127.0.0.1",16888)) # 绑定手机卡

# 参数可以设置最大的半连接数 最大5个
server.listen(5) # 开始待机

# 连接循环 可以不断接受新连接
while True:
client, addr = server.accept()

# 通讯循环 可以不断的收发数据
while True:
try:
# 如果是windows 对方强行关闭连接 会抛出异常
# 如果是linux 不会抛出异常 会死循环收到空的数据包
data = client.recv(1024)
if not data:
client.close()
break

print("收到客户端发来的数据:%s" % data.decode("utf-8"))
client.send(data)
except ConnectionResetError:
print("客户端强行关闭了连接")
client.close()
break

client.close() #挂断电话
server.close() # 关机

客户端

import socket

client = socket.socket()

client.connect(("127.0.0.1",16888))

client.send("hello 服务器".encode("utf-8"))

print("===================")
data = client.recv(1024) # 该函数会阻塞 直到操作缓冲区有数据位置
print("===================")

print("收到服务器:%s" % data.decode("utf-8"))

client.close()


----------------------------------------------------------------------------------

UDP模板

import socket

# UDP协议 在创建socket是 只有一个类型不同(socket.SOCK_DGRAM)
server = socket.socket(socket.AF_INET,socket.SOCK_DGRAM,proto=0)

server.bind(("127.0.0.1",8888))

while True:
data,addr = server.recvfrom(1024) # 阻塞 直到收到数据为止
print("收到来自%s的消息:%s" % (data.decode("utf-8"),addr[0]))
# 返回值为 数据 和 对方ip地址 和端口号
server.sendto(data.upper(),addr)

print(res)
server.close()

客户端:
import socket

client = socket.socket(socket.AF_INET,socket.SOCK_DGRAM,0)

while True:
data = input(">>:").encode("utf-8")输入要传输的信息
client.sendto(data,("127.0.0.1",8888))指定传输的地址和端口号
d,addr = client.recvfrom(1024)接收包的大小
print(d.decode("utf-8"))

client.close()

猜你喜欢

转载自www.cnblogs.com/wenchen/p/10174283.html
今日推荐