如何使用套接字编程将字典数据从客户端发送到python服务器以与df2进行比较?

问题描述 投票:-1回答:2

我正面临套接字编程的问题。这是一个服务器端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.
python json sockets dictionary
2个回答
0
投票

最好使用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() 

0
投票

您正在将dictstr进行比较,这就是比较失败的原因。

也许是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
...
© www.soinside.com 2019 - 2024. All rights reserved.