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 db文件_python中查