Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python简单套接字客户机/服务器示例_Python_Sockets_Streaming - Fatal编程技术网

python简单套接字客户机/服务器示例

python简单套接字客户机/服务器示例,python,sockets,streaming,Python,Sockets,Streaming,我试图通过一个玩具示例来探索如何使用python中的套接字来流式传输数据: 到目前为止,我为服务器创建了以下代码: from socket import * import time s = socket(AF_INET, SOCK_STREAM) s.bind(('', 10000)) s.listen(5) while True: client, addr = s.accept() print('Got a conne

我试图通过一个玩具示例来探索如何使用python中的套接字来流式传输数据:

到目前为止,我为服务器创建了以下代码:

from socket import *    
import time    

s = socket(AF_INET, SOCK_STREAM)    
s.bind(('', 10000))    
s.listen(5)    

while True:    
    client, addr = s.accept()    
    print('Got a connection from %s' % str(addr))    
    timestr = time.ctime(time.time()) + "\r\n"     
    client.send(timestr.encode('ascii'))               
    client.close()  
客户机代码:

from socket import *    
s = socket(AF_INET, SOCK_STREAM)
s.connect(('localhost', 10000))
tm = s.recv(1024)
s.close()
print('The time is %s' % tm.decode('ascii'))
这很有效。 现在,我想转换这些代码,以便服务器每秒发送一个字符串(不管是什么),客户端打印它。(即测试数据流)

我尝试了以下几点:

while True:
    client, addr = s.accept()
    print('Got a connection from %s' % str(addr))
    while True:
        timestr = time.ctime(time.time()) + "\r\n"
        client.send(timestr.encode('ascii'))
        time.sleep(1)
    client.close()
但是没有运气。 坦率地说,我有点迷路了。我寻找了创建一个基本流媒体示例的简单示例,但我没有发现任何与我的简单程度相匹配的东西


非常感谢任何指针。

在获得1024个字符之前,客户端不会打印任何内容。这需要一段时间。将它作为基本对象,您必须自己完成所有操作。客户机不知道它将获得多少数据以及何时停止等待数据并显示它获得的数据。一种方法是使用循环获取一个字节(并添加到字符串中),直到获得
\n
。另一种方法是发送具有固定大小的数据,其中包含它将发送的字符串长度的信息,然后客户端首先必须接收具有已知大小的数据,以获取它必须接收的日志字符串的信息,然后使用具有此大小的
recv()
。我有,但我不记得它们是否显示了所有描述的版本。显示第二种方法。有时我看到人们使用pickle来发送数据,因为它可能有获取数据大小的方法。
1024
,因为所有示例都使用这个值,人们重复它
1024
2**10
,因此它是
1kb
,在其他系统中被视为
1000
1km
。使用套接字时,您永远不知道将发送多少数据,但必须在函数
recv()中使用一些值