博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
tcp/udp协议代码实现
阅读量:4315 次
发布时间:2019-06-06

本文共 4355 字,大约阅读时间需要 14 分钟。

day 29

一、TCP协议代码实现

1、基础版:

-------------socket.serve-------import socket​# 买手机 默认得到是一个TCP的socketserver = socket.socket()# 两行代码的效果是一样的# socket的家族   AF_INET# socket的类型# SOCK_STREAM 对应的是TCP     SOCK_DGRAM 对应的是UDP​# server = socket.socket(socket.AF_INET,socket.SOCK_STREAM,0)# 床架基于UDP的socket# server = socket.socket(socket.AF_INET,socket.SOCK_DGRAM,0)​server.bind(("127.0.0.1",16888))  # 绑定手机卡server.listen() # 开始待机​# 得到对方的socket对象与地址client,addr = server.accept() # 接收通话请求 # 该函数会阻塞 直到有连接请求过来​​print("==========")# buffersize 表示应用程序的缓冲区大小     recv其实是 从系统缓冲区读取数据到应用程序data = client.recv(1024)   # 该函数会阻塞 直到操作缓冲区有数据位置print("==========")​-----------------socket.client----------------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()
 

2、TPC异常处理版:

---------------socket.serve-------------import  socket​server = socket.socket()server.bind(("127.0.0.1",8888))server.listen()​client,addr = server.accept()​while True:    try:        data = client.recv(1024)   #win状态下客户端异常关闭,会抛出错误        if not data:               #如果是linux 不会抛出异常 会死循环收到空的数据包            print("对方已经关闭.....")            break        print(data.decode("utf-8"))        client.send(data.upper())    except ConnectionResetError:        print("对方异常关闭连接...")​client.close()server.close()​---------------socket.client-------------import  socket​client = socket.socket()client.connect(("127.0.0.1",8888))client.send("hello".encode("utf-8"))data = client.recv(1024)print(data.decode("utf-8"))​client.close()

 

3、半连接池:

----------socket.serve--------import  socket​server = socket.socket()server.bind(("127.0.0.1",8888))# 参数可以设置最大的半连接数   最大5个server.listen(5)​import timewhile True:    time.sleep(0.5)​server.close()​---------socket.client---------import  socket​client = socket.socket()client.connect(("127.0.0.1",8888))​while True:    client.send(input(">>:").encode("utf-8"))    data = client.recv(1024)    print(data.decode("utf-8"))​client.close()
 

4、循环收发:

-------------------socket.serve-----------import socket​# 买手机 默认得到是一个TCP的socketserver = socket.socket()​# 两行代码的效果是一样的# socket的家族   AF_INET# socket的类型# SOCK_STREAM 对应的是TCP     SOCK_DGRAM 对应的是UDP​# server = socket.socket(socket.AF_INET,socket.SOCK_STREAM,0)# 创建基于UDP的socket# server = socket.socket(socket.AF_INET,socket.SOCK_DGRAM,0)​​server.bind(("127.0.0.1",16888))  # 绑定手机卡​server.listen() # 开始待机​# 连接循环 可以不断接受新连接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()            breakclient.close() #挂断电话server.close() # 关机​---------------socket.client--------------import socket​client = socket.socket()client.connect(("127.0.0.1",16888))while True:    msg = input(">:")    client.send(msg.encode("utf-8"))    data = client.recv(1024)    print("收到服务器:%s" % data.decode("utf-8"))client.close()

 

二、UDP协议代码实现:

------------------socket.serve--------------import socket​# UDP协议 在创建socket是 只有一个类型不同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()​---------------socket.client1--------------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()​------------socket.client2--------------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()

 

 

转载于:https://www.cnblogs.com/peng-zhao/p/10176054.html

你可能感兴趣的文章
component-based scene model
查看>>
Echart输出图形
查看>>
hMailServer搭建简单邮件系统
查看>>
从零开始学习jQuery
查看>>
Spring+SpringMVC+MyBatis深入学习及搭建(四)——MyBatis输入映射与输出映射
查看>>
opacity半透明兼容ie8。。。。ie8半透明
查看>>
CDOJ_24 八球胜负
查看>>
Alpha 冲刺 (7/10)
查看>>
一款jQuery打造的具有多功能切换的幻灯片特效
查看>>
SNMP从入门到开发:进阶篇
查看>>
@ServletComponentScan ,@ComponentScan,@Configuration 解析
查看>>
unity3d 射弹基础案例代码分析
查看>>
thinksns 分页数据
查看>>
os模块
查看>>
LINQ to SQL vs. NHibernate
查看>>
基于Angular5和WebAPI的增删改查(一)
查看>>
windows 10 & Office 2016 安装
查看>>
最短路径(SP)问题相关算法与模板
查看>>
js算法之最常用的排序
查看>>
Python——交互式图形编程
查看>>