我正面临套接字编程的问题。这是一个服务器端python程序,在其中我从客户端接收了字典格式的df1数据。如何从双方接收相同的数据df1和df2?
import socket
import sys
def server_program():
HOST = '192.168.0.115'
PORT = 8888
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print('socket created')
try:
s.bind((HOST, PORT))
except socket.error as err:
print('Bind Failed, Error Code: ' + str(err[0]) + ', Message: ' + err[1])
sys.exit()
print('Socket Bind Success!')
s.listen(10)
print ('Socket is now listening')
while True:
conn, addr = s.accept()
print ('Connect with ' + addr[0] + ':' + str(addr[1]))
df1 = conn.recv(1024)
print(df1)
conn.close()
break
s.close()
df2 = {"name":"rajat", "place":"rajasthan"} # here I put df2 equals to the df1 to get compared.
print(df2)
if df1 == df2:
print('yes Data Exists')
else:
print('No Data')
if __name__ == '__main__':
server_program()
client-side.py
import socket
import sys
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('192.168.0.115', 8888)) #IP is the server IP
for args in sys.argv:
if args == '':
args = 'no args'
else:
df1 = {"name":"rajat", "place":"rajasthan"}
s.sendall(df1)
print('Data is sent to the server!!')
我收到的输出是:-
C:\Users\Pallavai\Desktop>python ese.py
socket created
Socket Bind Success!
Socket is now listening
Connect with 192.168.0.115:56105
{"name":"rajat", "place":"rajasthan"}
{'name': 'rajat', 'place': 'rajasthan'}
No Data
Why these both are not same as df2 is directly printed.
最好使用cmp比较字典。我添加了用于比较两个字典的代码。
import socket
import sys
def server_program():
HOST = '192.168.0.115'
PORT = 8888
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print('socket created')
try:
s.bind((HOST, PORT))
except socket.error as err:
print('Bind Failed, Error Code: ' + str(err[0]) + ', Message: ' + err[1])
sys.exit()
print('Socket Bind Success!')
s.listen(10)
print ('Socket is now listening')
while True:
conn, addr = s.accept()
print ('Connect with ' + addr[0] + ':' + str(addr[1]))
df1 = conn.recv(1024)
print(df1)
conn.close()
break
s.close()
df2 = {"name":"rajat", "place":"rajasthan"} # here I put df2 equals to the df1 to get compared.
print(df2)
res = cmp (df1, df2)
print(res) # If both are equal, it will print 0 else -1
if res == 0:
print('yes Data Exists')
else:
print('No Data')
if __name__ == '__main__':
server_program()
您正在将dict
与str
进行比较,这就是比较失败的原因。
也许是pickle
数据,然后在服务器上将其发送并正确解码。
在这种情况下,使用JSON进行编码和解码是适当的。
例如,在服务器端,
import json
...
print ('Connect with ' + addr[0] + ':' + str(addr[1]))
df1 = conn.recv(1024)
df1 = json.loads(df1.decode('utf-8')) # decode the dict from JSON
conn.close()
...
在客户端,
import json
...
df1 = {"name":"rajat", "place":"rajasthan"}
s.sendall(json.dumps(df1).encode('utf-8')) # encode the dict to JSON
...