在利用socket模块进行网络通信时,我们常常需要在发送端对所传输的内容利用encode进行编码,而在接收端常需要利用decode进行解码。在日常使用中为避免反复输入编码和解码的格式,可以对发送和接收函数首先进行相应的处理,然后再调用新得到的模块。这样可以保证前后编码格式的一致性,也能方便有效的改变需要进行编码的格式。以下代码编码展示了udp通信协议下的修改方法:
import socket
class Mysocket(socket.socket):
def __init__(self,encoding='utf-8'):
self.encoding=encoding
super(Mysocket,self).__init__(type=socket.SOCK_DGRAM) #继承了父类socket.socket类中的方法
def mst(self,msg_s,addr):
return self.sendto(msg_s.encode(self.encoding),addr)
def mrf(self,num):
msg_r,addr=self.recvfrom(num)
return msg_r.decode(self.encoding),addr
在对编码格式确定之后,在接下来的使用中只需要调用这个新的模块,选用新定义的发送和接收方法即可实现,固定编码格式。示例如下所示:
#客户端
import mysocket
msk=mysocket.Mysocket()
msk.mst('wodeej家居安防',('127.0.0.1',8000))
msk.close()
#服务器端
import mysocket
msk=mysocket.Mysocket()
msk.bind(('127.0.0.1',8000))
msg_r,addr=msk.mrf(1024)
print(msg_r)
msk.close()