繁体   English   中英

python中的服务器套接字不打印新行

[英]Server socket in python doesn't print new line

我正在尝试简单的客户端和简单的服务器,客户端发送 2 个消息,服务器接收 2 个消息。 我正在打印第一个按摩打印(数据1)和第二个按摩打印(数据2),并以某种方式在同一行中打印两个按摩。 你能帮我吗 ?

服务器

import socket

SERVER_IP = '0.0.0.0'
DEST_PORT = 1731

server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server_socket.bind((SERVER_IP,DEST_PORT))
server_socket.listen(1)
client_socket,address=server_socket.accept()


data1 = client_socket.recv(512).decode()
print(data1)
data2 = client_socket.recv(512).decode()
print(data2)

client_socket.close()
server_socket.close()

客户代码

#client
import socket

HOST_IP = '127.0.0.1'
DEST_PORT = 1731

my_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

my_socket.connect((HOST_IP,DEST_PORT))

data1 = "test1"
print("client send")
my_socket.sendall(data1.encode())
my_socket.sendall("second send ".encode())

my_socket.close()

TCP 套接字是一种面向流的协议,而不是面向消息的协议。

发生的事情是您的客户端在您的服务器从套接字读取任何内容之前最终发送b"test1second send "

当它这样做时,它最多读取 512 个字符 - 足以容纳您的消息 - 同样,最多 512 个字符,但此时读取的字符为零,并打印一个空行。

根据您的实际需求,您需要想办法对您的消息进行定界或封装; 对于文本,一个流行的选择是换行符(尽管如果您需要在消息中传输实际的换行符,它会让您陷入困境)。

更好的选择仍然是netstrings 之类的东西,其中每条消息前面都有它的长度(网络字符串的 ASCII 格式,但它可以是二进制无符号整数(4 个字节),或您指定的任何内容),或某种TLV方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM