python电脑编程求圆的面积案例_学Python划重点七 网络编程(UPD Socket编程、上传文件实例、计算圆的面积实例)...

一、UPD Socket 编程

socket 对象中与UDP Socket 服务器编程有关的方法是bind() ,注意不需要listen() 和accept() , 这是因为UDP 通信不需要像TCP 一样监听端口,建立连接。

socket.recvfrom(buffsize) : 接收UDP Socket 数据,该方法返回 二元组对象(data,address) ,data 是接收的字节序列对象;address 是发送数据的远程Socket 地址。参数buffsize 指定一次接收的最大字节数,因此如果要接收的数据量大于buffsize ,则需要多次调用该方法进行接收。

socket.sendto(bytes, address) : 发送UDP Socket 数据,将bytes 数据发送到地址为address 的远程Socket ,返回成功发送的字节数。如果要发送的数据量很大,则需要多次调用该方法发送数据。

举例:

# 服务器

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

s.bind(('', 8888))

print(' 服务器启动...')

# 从客户端接收数据

data, address = s.recvfrom(1024)

print(' 从客户端接收消息:{0}'.format(data.decode()))

# 给客户端发送数据

s.sendto(' 你好!'.encode(), address)

# 释放资源

s.close()

# 客户端

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# 服务器地址

address=('127.0.0.1', 8888)

# 给服务器发送数据

s.sendto(b'Hello', address)

# 从服务器接收数据

data, _ = s.recvfrom(1024)

print(' 从服务器接收消息:{0}'.format(data.decode()))

# 释放资源

s.close()

二、TCP 上传文件

20200713213625457.gif ==服务器端:==

import wx

import socket

class MyFrame(wx.Frame):

def __init__(self):

super().__init__(parent=None,size=(300,150),title="服务器接收文件")

self.Center()

panel=wx.Panel(self)

self.fileText = wx.TextCtrl(panel,id=-1,pos=(15,5),size=(200,25))

openButton = wx.Button(panel, label="开启服务器")

upButton = wx.Button(panel, label="保存" )

openButton.Bind(wx.EVT_BUTTON, self.acceptFile)

upButton.Bind(wx.EVT_BUTTON, self.saveFile)

box = wx.BoxSizer()

mainbox=wx.BoxSizer(wx.VERTICAL)

mainbox.Add(self.fileText, 1, flag= wx.ALL|wx.CENTER,border=10)

box.Add(openButton, 1, flag=wx.ALL|wx.CENTER,border=10)

box.Add(upButton, 1, flag=wx.ALL | wx.CENTER, border=10)

mainbox.Add(box, 1, flag=wx.ALL | wx.CENTER, border=10)

panel.SetSizer(mainbox)

def acceptFile(self, event):

self.s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)

self.s.bind(("", 8888))

self.s.listen(5)

print("服务器启动····")

with self.s.accept()[0] as conn:

buffer = []

while True:

data = conn.recv(1024)

if data:

buffer.append(data)

else:

break

self.reust = bytes().join(buffer)

self.fileText.SetValue("接收完全,可选择位置保存!")

def saveFile(self, event):

dlg = wx.FileDialog(self,message="select the Save file style",defaultFile="",)

if dlg.ShowModal() == wx.ID_OK:

filename = ""

paths = dlg.GetPaths()

for path in paths:

filename = filename + path

self.fileText.SetValue(filename)

with open(filename, "wb") as file:

file.write(self.reust)

print("服务器文件保存完成····")

dlg.Destroy()

class App(wx.App):

def OnInit(self):

frame=MyFrame()

frame.Show()

return True

if __name__=="__main__":

app=App()

app.MainLoop()

==客户端:==

import socket

import wx

class MyFrame(wx.Frame):

def __init__(self):

super().__init__(parent=None,size=(300,150),title="客户端上传文件")

self.Center()

panel=wx.Panel(self)

self.fileText = wx.TextCtrl(panel,id=-1,pos=(15,5),size=(200,25))

openButton = wx.Button(panel, label="打开")######

upButton = wx.Button(panel, label="上传" )

openButton.Bind(wx.EVT_BUTTON, self.onOpenFile)####

upButton.Bind(wx.EVT_BUTTON, self.upLoad)

box = wx.BoxSizer()

mainbox=wx.BoxSizer(wx.VERTICAL)

mainbox.Add(self.fileText, 1, flag= wx.ALL|wx.CENTER,border=10)

box.Add(openButton, 1, flag=wx.ALL|wx.CENTER,border=10)

box.Add(upButton, 1, flag=wx.ALL | wx.CENTER, border=10)

mainbox.Add(box, 1, flag=wx.ALL | wx.CENTER, border=10)

panel.SetSizer(mainbox)

def onOpenFile(self, event):

dlg = wx.FileDialog(

self, message="Choose a file",

defaultFile="",)

if dlg.ShowModal() == wx.ID_OK:

tmp = ""

paths = dlg.GetPaths()

for path in paths:

tmp=tmp+path

self.fileText.SetValue(tmp)

dlg.Destroy()

def upLoad(self,event):

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:

s.connect(("127.0.0.1", 8888))

with open(self.fileText.GetValue(), "rb") as file:

while True:

data = file.read(1024)

if data:

s.send(data)

else:

break

print("上传完成")

class App(wx.App):

def OnInit(self):

frame=MyFrame()

frame.Show()

return True

if __name__=="__main__":

app=App()

app.MainLoop()

三、TCP 计算圆的面积

20200713214040543.gif ==服务器端:==

import socket

import wx

class MyFrame(wx.Frame):

def __init__(self):

super().__init__(parent=None,size=(350,250),title="服务器:计算圆的面积")

self.Center()

panel=wx.Panel(self)

self.text = wx.TextCtrl(parent=panel, id=-1, style=wx.TE_MULTILINE,size=(100,150))

mainbox=wx.BoxSizer(wx.VERTICAL)

mainbox.Add(self.text,flag=wx.EXPAND)

panel.SetSizer(mainbox)

# 应用程序

class App(wx.App):

def OnInit(self):

frame=MyFrame()

frame.Show()

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:

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

s.listen(5)

with s.accept()[0] as conn:

while True:

data = conn.recv(1024)

if len(data) != 0:

frame.text.LabelText += "你的半径为:" + data.decode() + "\r\n"

msg=str(3.14*float(data.decode())**2)

conn.send(msg.encode())

frame.text.LabelText += "计算结果:" + msg + "\r\n"

else:

break

return True

# 进入main函数运行:循环

if __name__=="__main__":

app=App()

app.MainLoop()

==客户端:==

import socket

import wx

s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

class MyFrame(wx.Frame):

def __init__(self):

super().__init__(parent=None, size=(350, 250), title="客户端:计算圆的面积")

self.Center()

panel = wx.Panel(self)

self.text = wx.TextCtrl(parent=panel, id=-1, style=wx.TE_MULTILINE, size=(100, 150))

startbutton = wx.Button(parent=panel, id=1, label="连接服务器")

self.inputtext = wx.TextCtrl(parent=panel, id=3,style=wx.TE_PROCESS_ENTER)

button = wx.Button(parent=panel, id=2, label="发送")

self.Bind(wx.EVT_BUTTON, self.Talk, id=1)

self.Bind(wx.EVT_BUTTON, self.on_button, id=2)

self.Bind(wx.EVT_TEXT_ENTER, self.on_button, self.inputtext)

box1 = wx.BoxSizer()

box1.Add(startbutton, 1, flag=wx.ALL | wx.EXPAND, border=10)

box1.Add(self.inputtext, 1, flag=wx.ALL | wx.EXPAND, border=10)

box1.Add(button, 1, flag=wx.ALL | wx.EXPAND, border=10)

mainbox = wx.BoxSizer(wx.VERTICAL)

mainbox.Add(self.text, flag=wx.EXPAND)

mainbox.Add(box1, flag=wx.EXPAND)

panel.SetSizer(mainbox)

# 连接服务器函数

def Talk(self, event):

s.connect(("127.0.0.1", 8888))

return

# 发送信息给服务器端

def on_button(self, event):

msg = self.inputtext.GetValue()# 获取要发送的文本

s.send(msg.encode())# 给服务器端发送信息

self.text.LabelText += "请输入半径:" + msg + "\r\n"# 将发送信息写入纪录文本框

data = s.recv(1024)# 等待接收服务器端信息

if len(data) != 0:

self.text.LabelText += "服务器计算结果为:" + data.decode() + "\r\n"# 将发送信息写入纪录文本框

class App(wx.App):

def OnInit(self):

frame = MyFrame()

frame.Show()

return True

if __name__=="__main__":

app=App()

app.MainLoop()

本文使用 mdnice 排版

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/502464.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

alert获取输入框内容_获取由 AlertDialog 生成的对话框中EditText的文本内容

在Android开发中,AlertDialog常用于处理用户的登录等。那么如何获取由 AlertDialog 生成的对话框中EditText的文本内容呢?其实Alertdialog弹出的Activity 可以认为是默认的Activity的子Activity。不能直接使用findViewById()来获取。强行使用会提示一个空…

linux中将 home目录备份成,6种优化Linux系统备份的应用与技巧

【51CTO.com快译】当转为使用Linux时,你可能会注意到你所使用的版本会带有一个默认的备份工具。然而,可能该工具并没有被设置好去备份你系统中所有重要的部分。而且,使用该默认工具也可能导致它以比预期更低的效率去产生一些更大的备份数据。…

db2嵌套查询效率_db2性能优化

性能优化概述DB2 的性能优化可以从三个方面分析:内存,CPU 和 I/O 。DB2 性能优化是一件较为复杂的综合性的工作 , 需要对问题的根源作全方位的探索和思考。同时也需要较深厚的数据库管理经验与优化知识。这对于初学者来说可能有些勉为其难。但是在很多情…

python数据分析函数大全_Python常用数据分析函数集合

1.Map函数 - 列表解析 ①.map()函数解析 (1).python源码信息C:\Users\ArSang>python Python3.6.3rc1 (v3.6.3rc1:d8c174a, Sep 19 2017, 16:39:51) [MSC v.1900 64bit (AMD64)] on win32 Type"help", "copyright", "credits" or "licens…

我的世界linux开服权限不足,我的世界路由器开服怎么获得超级管理员权限

我的世界路由器开服怎么获得超级管理员权限。小伙伴们使用路由器开服的时候会发现一个明显的问题,部分路由器并没有给你最高管理员的权限,导致大家开服的时候出现各种问题。那么路由器开服怎么才能快速获得超级管理员的权限呢?说明:为什么路…

python无法调用安装的包_如何使用python命令和安装包进行安装Django框架

在python语言的框架中,Django框架是一种Web应用框架,这个框架的版本需要跟python的版本搭配上。其中,Django框架可以使用命令安装,也可以使用下载压缩包进行安装。下面利用实例说明Django框架安装方法和过程,操作如下&…

vs传值接收页面怎么直接打开_VS2003传值

估计楼主应该是用了ORM,只知道定义泛型类,然后ORM自己就完成映射,具体怎么得到的数据,就不知道了.所以,请退回到旧时代,用DataTable传递数据.cmdText:这个是SQL查询语句;connStr:这个是数据库连接字符串.public static DataTable(string cmdText,string connStr){SqlConnection…

linux摄像头内核驱动开发,怎么在Linux下开发摄像头驱动

无根之木不活,无基之楼不立,无论是学习哪个领域知识,基础是重中之重。针对学习linux驱动,我们来仔细谈谈:个人认为C语言和数据结构就是重中之重!Linux系统最优秀的地方就在于内核。无论是进程调度&#xff…

idea卡顿的解决方法_lt;绝地求生/PUBG/解决卡顿方法(停机9小时)维护gt;9月16日(星期三) 08点30分amp;崩溃...

【正式服不停机维护公告】我们将在北京时间10月7日(星期三) 10点开始正式服的不停机维护。- 维护开始时间:10月7日(星期三) 10点 - 维护内容:优化服务器以及BUG修复1. 修复了在四排模式下队伍列表中无法显示队员的问题;2. 修复了警示胶带背包…

安装应用需要打开未知来源权限_打开安卓这个开关 不让流氓软件肆意妄为

1月21消息,国外媒体Cybernews曝光了数款存在安全隐患的安卓应用,从这些应用中我们发现大都是相机类应用。根据Cybernews的说法这些应用会寻求多项权限,而多数权限和应用本身功能并不相关。其实在国内这类软件也并不缺乏,他们通常会…

git for windows_手把手教会舍友玩 Git (包教包会,再也不用担心他的学习)

作 者: BWH_Steven 原文链接:https://www.cnblogs.com/ideal-20/p/13644420.html舍友长大想当程序员,我和他爷爷奶奶都可高兴了,写他最喜欢的喜之郎牌Git文章,学完以后,再也不用担心舍友的学习了(狗头)哪里…

合并的表格怎么加横线_word怎么合并表格边框

回答:方法如下:去掉Word文字保留表格的方法一:1、全选表格,按 Delet 键,表格的所有文字被删除,如图3所示:2、图3是图1所示是表格,文字都没有了。去掉Word文字保留表格的方法二:全选表…

Linux免设置路由端口映射,2014/04/01 演示中设置linux路由器、端口过滤的使用、路由设置...

2.linux主机做为路由器,具有数据转发和随机丢包的功能1.1.iptables 基于内核的防火墙1.2.编写防火墙设置的脚本及鸟哥的linux私房菜(服务器篇)linux 路由器的设置参考鸟哥的linux私房菜(服务器篇)使能数据包转发功能即可,linux内核本身就支持1.#cat /pro…

stotybord如何添加子视图_SQL复杂查询-子查询

视图:1.视图的概念引入:SQL数据库里面存放的是SQL语句,视图中查看到的SQL查询语句,当我们运用客户端连接到视图时候,视图会运行里面的查询语句,从库中查找出数据,保存在临时表里面。当客户端和数…

python模拟登录页面下载_python爬虫之模拟登录

最近应朋友要求,帮忙爬取了小红书创作平台的数据,感觉整个过程很有意思,因此记录一下。在这之前自己没怎么爬过需要账户登录的网站数据,所以刚开始去看小红书的登录认证时一头雾水,等到一步步走下来,最终成…

springboot 2.3_Spring Boot 应用监控,早发现早

小Hub领读:服务都需要监控,SpringBoot项目中,你常用哪些监控模块呢?actuator?admin?作者:小小____https://segmentfault.com/a/1190000022945443当一个 Spring Boot 应用运行的时候,开发者需要对 Spring …

linux 内核 xfs ail,linux 3.10内核 xfs的一次io异常导致的hung crash

8556395.925003] XFS (sdi): xfs_log_force: error -5returned.[8556407.425047] INFO: task umount:19286 blocked for more than 1200seconds.----这个默认是120,该环境上是被人为设置1200[8556407.425653] "echo 0 > /proc/sys/kernel/hung_task_timeout…

sql statements_Postgresql监控sql模块之pg_stat_statements模块--部署篇

概述今天主要介绍一下PG一个很重要的模块--pg_stat_statements模块,对于做性能观察还是很不错的。一、pg_state_statements模块简介1、简介pg_stat_statements模块提供一种方法追踪一个服务器所执行的所有 SQL 语句的执行统计信息,可以用于统计数据库的资…

vscode 文件夹中查找_VSCode 多文件搜索和替换

本文目录结构VSCode 多文件搜索和替换虽然在“基础入门”这个部分中,我们一直都在介绍编辑器的各种功能,但是,为了把搜索这样的一个功能介绍完整,我们今天就再讲一下在 VS Code 当中如何使用多文件搜索。关于 VSCode 单文件搜索和…

linux服务配置大全 fedora 8 ftp 百度文库,Linux下VSFTP配置全攻略

Linux下VSFTP配置全攻略[日期:2007-10-05]来源:Linux公社作者:Linuxidc[字体:大 中 小]4]如果要以系统中存在的普通用户登入FTP,也没有什么可以设置的,添加一个用户就行。比如我要添加beinan这个用户&#…