学习简单的python----最简单的python +3(写入XML,使用UDP发送)

这篇博客介绍了Python初学者如何创建简单的客户端程序,程序能将输入的Name保存到XML文件,并利用XML内容通过UDP协议发送到服务器。在实现过程中,作者遇到了sendto函数参数错误的问题,通过修改将字符串转换为bytes类型成功解决了问题。
#!/usr/bin/python
from Tkinter import *
import socket
import sys
class PPCU(object):
	def __init__(self):
		self.top=Tk()
		self.top.title('vKsir01.01')

		self.nameVar=StringVar()
		self.nameVar.set('Name')
		self.departVar=StringVar()		#departVar is a Variable string
		self.departVar.set('Department')#It's default value is 'Department'

		frame=Frame(self.top)
		
		nameLabel=Label(frame,text="Name:",underline=0)
		self.nameEntry=Entry(frame,textvariable=self.nameVar)
		self.nameEntry.focus_set()
		departLabel=Label(frame,text='Depart:',underline=0)
		departEntry=Entry(frame,textvariable=self.departVar)

		nameLabel.grid(row=0,column=0,sticky=W,pady=3,padx=3)
		self.nameEntry.grid(row=0,column=1,sticky=EW,pady=3,padx=3)

		departLabel.grid(row=0,column=2,sticky=EW,pady=3,padx=3)
		departEntry.grid(row=0,column=3,columnspan=2,sticky=EW,pady=3,padx=3)
	
		#work Plan
		workLabel=Label(frame,text='WorkPlan')
		workEntry=Entry(frame)

		workLabel.grid(row=1,column=0,sticky=W,pady=1,padx=3)
		workEntry.grid(row=2,column=0,rowspan=2,columnspan=5,sticky=EW,pady=1,padx=4)

		#WorkSpace
		amWorkLabel=Label(frame,text='TASK a.m')
		amWorkEntry=Entry(frame)
		amWorkLabel.grid(row=4,column=0,sticky=W,pady=1,padx=3)
		amWorkEntry.grid(row=5,column=0,rowspan=2,columnspan=5,sticky=N+E+S+W,pady=1,padx=3)	

		#Button of OK
		okButton=Button(frame,text="OK",command=self.ok)
		okButton.grid(row=7,column=3,sticky=EW,pady=3,padx=3)

		cancelButton=Button(frame,text="Cancel",command=self.close)
		cancelButton.grid(row=7,column=4,sticky=EW,pady=3,padx=3)

		cancelButton.bind("<Return>",self.close)

		frame.pack()

	#click ok_button	
	def ok(self,event = None):
		self.sendSrvSock()
	#click close_button
	def close(self,event=None):
		quit()

	def createXml(self):
		from xml.dom.minidom import Document 
	 
		# Create the minidom document 
		workmsg = Document() 
	 
		# Create the <wml> base element 
		wml = workmsg.createElement("wml") 
		workmsg.appendChild(wml) 
	 
		# Give the <wml> elemenet some text
		getext=''
		getext=self.nameEntry.get()
		ptext = workmsg.createTextNode(getext) 
		wml.appendChild(ptext)

		return workmsg
		
		#function of sending message to server
	def sendSrvSock(self):
		sendmsg=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
		send_data=''		#declace a string
		send_data = self.createXml()
		sendmsg.sendto(bytes(send_data),('10.11.1.88',6601))
	
def main():
	PPCU()
	mainloop()
if __name__=='__main__':
	main()


客户端程序运行示例,如上。

主要实现了客户端简单的界面,输入的Name写入XML,然后使用XML作为消息发送程序,向服务端发送使用UDP发送消息。

注:遇到问题--sendto的时候,出现 sendto() takes exactly 3 arguments (2 given)

解决:>>> data = 'UDP Test Data'

>>> udp.sendto(data, (hostname, port))Traceback (most recent call last):

 File "", line 1, in TypeError: sendto() takes exactly 3 arguments (2 given)

Is : self.socket.sendto(msg, self.address)

Should look like : self.socket.sendto(bytes(msg), self.address)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值