I have a CPP server and python3 client but when I'm sending data I'm getting garbage values (wrong numbers and \0 in the middle of the string) i tried to use this answer and also C++ TCP socket garbage value.
the client code (python3):
MESSAGE = "HELLO WORLD"
def send_via_socket(message):
print(len(message))
s.send(bytes([len(message)]))
data = pack('<Q%ds' % len(message), len(message), message.encode())
s.send(data)
return True
SERVER_IP = "127.0.0.1"
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# Create a socket object
ans = s.connect((SERVER_IP, PORT))
if ans is None:
write_to_log('connection to server establish')
send_via_socket(MESSAGE)
else:
write_to_log('connection failed')
message = s.recv(1024)
write_to_log(str(message, 'utf-8'))
res = res
except socket.error as err:
message = f"socket creation failed with error %s" % err
write_to_log(message)
return res
and the read function in the server (cpp)
int Server::readString(int fd, std::string &str)
{
size_t len;
char *buf;
auto bytesReceived =read(fd, &len, sizeof(len));
if(bytesReceived == -1)
{
return bytesReceived;
}
buf = new char[len];
bytesReceived = read(fd, buf, len);
if(bytesReceived == -1)
{
return bytesReceived;
}
str.assign(buf, len);
delete []buf;
return bytesReceived;
}
I also have a CPP client and its work fine