python网络编程之多线程同时接受和发送


Posted in Python onSeptember 03, 2019

本文实例为大家分享了python多线程同时接受和发的具体代码,供大家参考,具体内容如下

'''
模仿qq 同时可以发送信息和接受信息多线程
'''


from socket import *
from time import sleep
import threading

# 负责接收数据
def recvData():
  udpRecvSocket = socket(AF_INET,SOCK_DGRAM)
  # 默认使用8080端口
  myRecvPort = 8080
  bindAddr = ('',8080)
  #try为了防止端口被占用 如果被占用有一次的修改机会 反正系统就被崩溃
  try:
    #绑定地址
    udpRecvSocket.bind(bindAddr)
  #端口被占用后的修改
  except OSError:
    myRecvPort = int(input("请输入本机接受端口端口:"))
    bindAddr = ('',myRecvPort)
    udpRecvSocket.bind(bindAddr)
  #socket模块中自带的方法 用来获取用户名和ip地址
  myIpAddr = gethostbyname(getfqdn(gethostname()))
  #打印本机ip地址和所用的端口
  print("本机ip地址为[{}],接受数据的端口为[{}]".format(myIpAddr,myRecvPort))

  #防止受到的消息部分丢失而引发的异常问题
  while True:
    try:
      recvData = udpRecvSocket.recvfrom(1024) #最大字节数为1024
      #recvData = recvData.decode('GB2312')
      print('对方电脑输出的内容是:{}'.format(recvData))
    except error as e:
      print(e)


#负责发送数据
def sendData():
  #防止和上文同时输入产生风险 所以发送数据暂停10秒后再运行
  sleep(10)
  udpSendSocket = socket(AF_INET,SOCK_DGRAM)
  #用户输入接受方信息并存储在 sendAddr 中
  sendIpAddr = input('请输入接受方的ip地址:')
  sendPort = int(input('请输入接受方的端口:'))
  sendAddr = (sendIpAddr,sendPort)


  while True:
    sendData = input('请输入要发送的内容:')
    udpSendSocket.sendto(sendData.encode(),sendAddr)


#负责多线程
def main():
  #多线程同时运行两个方法
  t1 = threading.Thread(target=recvData)
  t2 = threading.Thread(target=sendData)
  t1.start()
  t2.start()
  t1.join()
  t2.jion()


if __name__ == '__main__':
  main()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中的生成器和yield详细介绍
Jan 09 Python
以Python的Pyspider为例剖析搜索引擎的网络爬虫实现方法
Mar 30 Python
Python中pip安装非PyPI官网第三方库的方法
Jun 02 Python
Fiddler如何抓取手机APP数据包
Jan 22 Python
CentOS 6.X系统下升级Python2.6到Python2.7 的方法
Oct 12 Python
python中MethodType方法介绍与使用示例
Aug 03 Python
tensorflow 用矩阵运算替换for循环 用tf.tile而不写for的方法
Jul 27 Python
python类中super() 的使用解析
Dec 19 Python
python学生管理系统的实现
Apr 05 Python
Python更改pip镜像源的方法示例
Dec 01 Python
如何用python反转图片,视频
Apr 24 Python
Python中的matplotlib绘制百分比堆叠柱状图,并为每一个类别设置不同的填充图案
Apr 20 Python
springboot配置文件抽离 git管理统 配置中心详解
Sep 02 #Python
python生成随机红包的实例写法
Sep 02 #Python
Django发送邮件功能实例详解
Sep 02 #Python
python读取Excel表格文件的方法
Sep 02 #Python
python将字典列表导出为Excel文件的方法
Sep 02 #Python
python数据处理之如何选取csv文件中某几行的数据
Sep 02 #Python
Python流程控制 while循环实现解析
Sep 02 #Python
You might like
造势之举?韩国总统候选人发布《星际争霸》地图
2017/04/22 星际争霸
有关php运算符的知识大全
2011/11/03 PHP
php简单实现短网址(短链)还原的方法(测试可用)
2016/05/09 PHP
php魔术方法功能与用法实例分析
2016/10/19 PHP
php脚本守护进程原理与实现方法详解
2017/07/20 PHP
PHP实现的字符串匹配算法示例【sunday算法】
2017/12/19 PHP
一个多次搜索+多次传值的解决方案
2007/01/20 Javascript
innerHTML,outerHTML,innerTEXT三者之间的区别
2007/01/28 Javascript
Javascript优化技巧(文件瘦身篇)
2008/01/28 Javascript
让你的CSS像Jquery一样做筛选的实现方法
2011/07/10 Javascript
javascript使用call调用微信API
2014/12/15 Javascript
javascript原型链继承用法实例分析
2015/01/28 Javascript
jQuery实现的简单折叠菜单(折叠面板)效果代码
2015/09/16 Javascript
jQuery height()、innerHeight()、outerHeight()函数的区别详解
2016/05/23 Javascript
JavaScript分步实现一个出生日期的正则表达式
2018/03/22 Javascript
JS中promise化微信小程序api
2018/04/12 Javascript
浅谈VUE防抖与节流的最佳解决方案(函数式组件)
2019/05/22 Javascript
CKeditor4 字体颜色功能配置方法教程
2019/06/26 Javascript
vue实现PC端分辨率适配操作
2020/08/03 Javascript
[00:42]《辉夜杯》—职业组预选赛12月3日15点 正式打响
2015/12/03 DOTA
[00:32]2018DOTA2亚洲邀请赛iG出场
2018/04/03 DOTA
[43:03]LGD vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
python生成随机mac地址的方法
2015/03/16 Python
python中zip和unzip数据的方法
2015/05/27 Python
Python扫描IP段查看指定端口是否开放的方法
2015/06/09 Python
Python 2与Python 3版本和编码的对比
2017/02/14 Python
python将ansible配置转为json格式实例代码
2017/05/15 Python
详解Python Opencv和PIL读取图像文件的差别
2019/12/27 Python
python实现mean-shift聚类算法
2020/06/10 Python
Python 3.10 的首个 PEP 诞生,内置类型 zip() 迎来新特性(推荐)
2020/07/03 Python
全球最大的跑步用品商店:Road Runner Sports
2016/09/11 全球购物
高中数学教师求职信
2013/10/30 职场文书
会计岗位说明书
2014/07/29 职场文书
2016自主招生校长推荐信范文
2015/03/23 职场文书
Go 自定义package包设置与导入操作
2021/05/06 Golang
聊聊CSS粘性定位sticky案例解析
2022/06/01 HTML / CSS