㈠ python如何使用socket來傳輸對象
importsocket
importstruct
sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.connect(('localhost',10000))
values=(1,'ab',2.7)
packer=struct.Struct('I2sf')
packed_data=packer.pack(*values)
try:
sock.sendall(packed_data)
finally:
sock.close()
有個模塊叫struct,可以自定義結構體,可以這樣發送代碼。
try:
importcPickleaspickle
except:
importpickle
classAA():
defa(self):
print"123"
ddd=AA()
data=pickle.mps(ddd)
還有個模塊叫pickle,可以打包任何python對象,打包的結果也可以拿到套接字里發。
㈡ Python socket 模塊
Python 提供了兩個基本的 socket 模塊。第一個是 Socket,它提供了標準的 BSD Sockets API。第二個是 SocketServer,它提供了伺服器中心類,可以簡化網路伺服器的開發。
Socket 模塊提供了 UNIX ® 程序員所熟悉的基本網路服務(也稱為 BSD API)。這個模塊中提供了在構建 socket 伺服器和客戶機時所需要的所有功能。
在 Python 中,socket 方法會向應用 socket 方法的對象返回一個 socket 對象。
㈢ python中使用socket編程,如何能夠通過UDP傳遞一個列表類型的數據
Python中的 list 或者 dict 都可以轉成JSON字元串來發送,接收後再轉回來。
首先
importjson
然後,把 list 或 dict 轉成 JSON
json_string=json.mps(list_or_dict)
如果你用的是Python3,這里的 json_string 會是 str 類型(即Python2的unicode類型),可能需要編碼一下:
if type(json_string) == six.text_type:
json_string = json_string.encode('UTF-8')
用socket發送過去,例如
s.sendto(json_string,address)
對方用socket接收,例如
json_string,addr=s.recvfrom(2048)
把JSON轉成 list 或 dict
list_or_dict=json.loads(json_string)
下面是個完整的例子:
client.py
#!/usr/bin/envpython
#-*-coding:UTF-8-*-
importsocket
importjson
importsix
address=('127.0.0.1',31500)
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
mylist=[1,2,3,4,5,6,7,8,9,10]
json_string=json.mps(mylist)
iftype(json_string)==six.text_type:
json_string=json_string.encode('UTF-8')
s.sendto(json_string,address)
s.close()
server.py
#!/usr/bin/envpython
#-*-coding:UTF-8-*-
importsocket
importjson
address=('127.0.0.1',31500)
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.bind(address)
json_string,addr=s.recvfrom(2048)
mylist=json.loads(json_string)
print(mylist)
s.close()
請先運行server.py,再運行client.py
㈣ python中,如何將一個指定的文件發送到對方主機的指定埠呢(用socket方式) 新手求指教!
#發送端
#-*-coding:utf-8-*-
importTkinter
importtkFileDialog
fromsocketimport*
importstruct
importos
defclient(filename):
Addr=('127.0.0.1',8000)
BUFSIZE=2048
Sendsocket=socket(AF_INET,SOCK_STREAM)
Sendsocket.connect(Addr)
FileHead=struct.pack('128s11i',filename,0,0,0,0,0,0,0,0,os.stat(filename).st_size,0,0)
Sendsocket.send(FileHead)
fp=open(filename,'rb')
while1:
FileData=fp.read(BUFSIZE)
ifnotFileData:
break
Sendsocket.send(FileData)
fp.close()
Sendsocket.close()
defFileOpen():
r=tkFileDialog.askopenfilename(title='PythonTkinter',
filetypes=[('Allfiles','*')])
filename=r.split('/')
client(filename[-1])
root=Tkinter.Tk()
button1=Tkinter.Button(root,text='FileOpen',height=8,width=14,bg='blue',
command=FileOpen)
button1.pack()
root.mainloop()#接收端
#-*-coding:utf-8-*-
fromsocketimport*
importos
importstruct
Addr=('127.0.0.1',8000)
BUFSIZE=1024
FileInfoSize=struct.calcsize('128s32sI8s')
SocketRecv=socket(AF_INET,SOCK_STREAM)
SocketRecv.bind(Addr)
SocketRecv.listen(5)
print"waitting........"
conn,addr=SocketRecv.accept()
print"sendfrom",addrFileHead=conn.recv(FileInfoSize)
filename,temp1,filesize,temp2=struct.unpack('128s32sI8s',FileHead)
printfilename,len(filename),type(filename)
printfilesize
filename='new_'+filename.strip('