码迷,mamicode.com
首页 > 其他好文 > 详细

网络编程的循环收发数据

时间:2018-12-26 00:27:14      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:效率   encode   input   sock   跨平台   host   erro   服务器   发送信息   

服务器
from socket import *
server = socket(AF_INET,SOCK_STREAM)#创建服务器对象,套接字家族,面向网络,选择tcp协议,udp(DGRAM)
HOST = "127.0.0.1"#设置服务器ip
PORT = 8888#设置端口
BASE_SIZE = 1024#设置接收文件上限
server.bind((HOST,PORT))#绑定端口,ip
server.listen(5)#监听
while True:
conn,addr = server.accept()#接收客户端请求,完成了三次挥手,获取客户端对象和地址
while True:
try:#监测客户端突然退出异常
msg = conn.recv(BASE_SIZE)#接收信息
if not msg:#linux系统客户端退出不会报错,一直发空包,故实现跨平台
conn.close()
break
print(msg.decode("utf-8"))#打印接收信息,以什么编码存,以什么编码读
conn.send(msg.upper())#给客户端回信息
except ConnectionResetError:#客户端突然退出时,关闭客户端对象,重新进入阻塞接收客户请求
conn.close()
server.close()

客户端
from socket import *
client = socket(AF_INET,SOCK_STREAM)#创建客户端对象,套接字家族,选择面向网络,选择tcp协议
HOST = "127.0.0.1"
PORT = 8888
BASE_SIZE = 1024
client.connect((HOST,PORT))#链接服务器,向服务器发请求,完成三次握手
while True:
msg = input(">>>:").strip().encode("utf-8")
client.send(msg)#发送信息,只能发送bytes类型
res = client.recv(BASE_SIZE)#接收服务器信息
print(res.decode("utf-8"))
client.close()

udp循环输入
服务器
from socket import *
server = socket(AF_INET,SOCK_DGRAM)#建立服务器,选择套接字家族和udp协议
HOST = "127.0.0.1"
PORT = 8888
BASE_SIZE = 1024
server.bind((HOST,PORT))#绑定端口,ip
while True:
msg,addr = server.recvfrom(BASE_SIZE)#直接接收,与tcp不同,tcp接收的是信息,udp接收的是信息和客户端地址
print(msg.decode("utf-8"))
server.sendto(msg.upper(),addr)#直接发送,需要加客户端地址

server.close()

客户端
from socket import *

client = socket(AF_INET, SOCK_DGRAM)
HOST = "127.0.0.1"
PORT = 8888
BASE_SIZE = 1024
while True:
msg = input(">>:").strip().encode("utf-8")
client.sendto(msg,(HOST,PORT))#发送时需加上服务器地址
res,addr = client.recvfrom(BASE_SIZE)#接收服务器信息和服务器地址
print(res.decode("utf-8"))

client.close()

tcp #好人协议,可靠性高,效率低
udp#可靠性低,不管对方收不收到,不管地址存不存在,效率高

网络编程的循环收发数据

标签:效率   encode   input   sock   跨平台   host   erro   服务器   发送信息   

原文地址:https://www.cnblogs.com/robert-zhou/p/10176967.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!