'Python socket send Data frame :Type Error: file must have 'read' and 'readline' attributes
How can I send selected data frame To client from server. I have a data frame I select specific data frame from it . i got error on client side Error is (TypeError: file must have 'read' and 'readline' attributes) on line pickle.load(received)
Server Side
import socket
import pandas as pd
import pickle
df = pd.read_csv(r"C:\Users\DELL\OneDrive\Desktop\mythesisdataset.csv" ,engine='python',
names=[ 'SBP', 'DBP', 'HEARTRATE', "Temperature" ])
normal_df = (df [ (df.SBP > 120) & (df.DBP > 90) & (df.HEARTRATE < 100) & (df [ 'Temperature' ] < 100) ])
print(normal_df)
normal_df_bytes = pickle.dumps(df)
s = socket.socket()
host = socket.gethostname()
port = 12345
s.bind((host, port))
print("host name:", host, " socket name:", socket)
print("Waiting for Fog-node to connect...")
s.listen()
while True:
c, addr = s.accept()
print('Got connection from', addr, '...')
bytes = c.send(normal_df_bytes)
c.close() # Close the connection
Client side
import socket
import sys
HOST, PORT = "123.123.123.123", 12345
print(sys.argv[0:]);
data = " ".join(sys.argv[1:])
Create a socket
(SOCK_STREAM means a TCP socket)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
# Connect to server and send data
sock.connect((socket.gethostname(), 12345))
sock.sendall(bytes(data + "\n", "utf-8"))
# Receive data from the server and shut down
received = str(sock.recv(1024), "utf-8")
pickle.load(received)
finally:
sock.close()
print("Sent: {}".format(data))
print("Received: {}".format(received))
Solution 1:[1]
pickle.load(received) expects a file. Use pickle.loads(received), which excpects bytes
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Itay Raveh |
