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 上传文件
==服务器端:==
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 计算圆的面积
==服务器端:==
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 排版
python电脑编程求圆的面积案例_学Python划重点七 网络编程(UPD Socket编程、上传文件实例、计算圆的面积实例)...相关推荐
- 用python编写一个求偶数阶乘的函数_一行Python代码写阶乘函数
原标题:一行Python代码写阶乘函数 背景 我以前用Dart写过一行的阶乘函数: fact(double n) => n < 0 ? throw ('n must be bigger t ...
- python需要背的英语单词怎么写_学Python必须背的42个常见单词,看看你都会吗?...
这42个单词是学习Python必须背会的单词,也是代码中常见的单词.希望你能都背下来!! 1. adult [ˈædʌlt] 成年人 2. authentication [ɔːˌθentɪˈkeɪ ...
- 输入两个数、用python求他们的和_从键盘上输入俩个实型数,编程求它们的和差积商,要求输出时,保留两位小数C语言编程题:从键盘上输入两个...
从键盘上输入俩个实型数,编程求它们的和差积商,要求输出时,保留两位小数 C语言编程题:从键盘上输入两个 www.zhiqu.org 时间: 2020-11-23 参考代码: #includev ...
- python太难学了-为何编程那么难?新手该怎么学Python?
点击蓝字"python教程"关注我们哟! 为何编程那么难?新手该怎么学Python? 1 因为入门编程并不是一件分分钟就能做到的事情 具体的建议是先把整本书从前到后翻一遍,有印象就 ...
- 没有任何基础的可以学python吗-对没有编程基础的人来说,直接学Python入门IT合适吗?...
原标题:对没有编程基础的人来说,直接学Python入门IT合适吗? 对于0基础的人,直接学 Python 编程合适吗? 小编只能说非常合适,因为在目前的编程语言中,Python的抽象程度是最高的,是最 ...
- python入门编程-对没有编程基础的人来说,直接学Python入门IT合适吗?
原标题:对没有编程基础的人来说,直接学Python入门IT合适吗? 对于0基础的人,直接学 Python 编程合适吗? 小编只能说非常合适,因为在目前的编程语言中,Python的抽象程度是最高的,是最 ...
- Python网络编程之socket编程
什么是Socket? Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面 ...
- python适合自学编程吗-对没有编程基础的人来说,直接学Python入门IT合适吗?
原标题:对没有编程基础的人来说,直接学Python入门IT合适吗? 对于0基础的人,直接学 Python 编程合适吗? 小编只能说非常合适,因为在目前的编程语言中,Python的抽象程度是最高的,是最 ...
- python的requests库发送携带上传文件的接口_python requests 库请求带有文件参数的接口实例...
python requests 库请求带有文件参数的接口实例 有些接口参数是一个文件格式,比如fiddler 抓包参数如下显示 这个接口的 form-data fiddler 显示的和不带文件参数的接 ...
最新文章
- 深度学习框架盘点和实践!
- 2次转管理失败后,我对项目、团队、敏捷转型的新认知
- python soup提取叶子标签_python3用BeautifulSoup抓取div标签
- artDialog组件应用学习(五)
- zabbix3.0 监控php,CentOS 6.8 搭建Zabbix 3.0.3监控系统
- 索尼笔记本如何进Bios设置U盘启动
- 知乎热议:嵌入式开发中C++好用吗?
- 如何在ASP.NET Core中自定义Azure Storage File Provider
- 内蒙古高考2021年成绩查询,内蒙古招生考试信息网:2021年内蒙古高考查分入口、查分系统...
- php fast cgi nginx,通过fast-cgi连接php-fpm和nginx之间的连接是持久的(保持活动)连接吗?...
- 基础编程题之最近公共祖先
- 如何在linux内核中读写文件
- linux 只运行一个实例 互斥锁,Linux多线程4-1_互斥量
- MAC下ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
- Redis数据结构及内部编码
- [渝粤教育] 西南科技大学 财务会计 在线考试复习资料(3)
- Java编写程序获取验证码
- 手把手教你用Python网络爬虫实现起点小说下载
- leetcode 1184 看起来很吓人,其实很简单的题目
- 齐岳DSPE-mPEG2000|二硬脂酸磷脂酰乙醇胺-聚乙二醇2000
热门文章
- jQuery之防止【冒泡事件】,阻止默认行为 【return false】 event.stopPropagation event.preventDefault...
- CSS样式如何解决IE浏览器不同版本的兼容问题
- (转)Web Services使用多态(XmlInclude) ,支持自定义类型
- filter导致跨域失效_【SpringMVC】与权限拦截器冲突导致的Cors跨域设置失效问题...
- python 连续三个数满足条件_计算满足条件的连续值数(Pandas Dataframe)
- cf两边黑屏怎么解决win10_关闭自动睡眠仍然睡眠?Win10过几分钟就会自动睡眠黑屏解决方法...
- mysql关于日期的函数_MySQL中关于日期函数汇总
- pycharm无缘无故打开Nosetest
- 动态规划——数塔问题
- [FPGA]基于FPGA的数字跑表