- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
服务器端为客户端接收和发回数据:
import socketserver
class ThreadedTCPRequestHandler(socketserver.BaseRequestHandler):
def handle(self):
try:
data = b''
while True:
package = self.request.recv(4096)
if not package:
break
data = data + package
self.request.sendall(data)
except ConnectionError as conError:
print(conError)
class ThreadedTCPServer(socketserver.ThreadingMixIn, socketserver.TCPServer):
pass
if __name__ == "__main__":
HOST, PORT = "localhost", 50007
print('Server start work!')
server = ThreadedTCPServer((HOST, PORT), ThreadedTCPRequestHandler)
ip, port = server.server_address
try:
server.serve_forever()
except KeyboardInterrupt:
print('Server stop by Keyboard Interrupt.')
客户端读取txt文件,发送给服务器等待回复:
def send_msg(data):
import socket
HOST = 'localhost'
PORT = 50007
reply = ''
try:
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((HOST, PORT))
s.sendall(data)
while True:
data = s.recv(4096)
if not data:
break
reply = reply+data.decode()
except OSError as err:
reply = err
finally:
return reply
#some.txt is big txt file
with open(r'some.txt', 'rb') as of:
print(send_msg(of.read()))
但是在最后一 block 数据之后实现这个“挂起”。我的问题是,需要更改什么才能获取所有数据。
最佳答案
我在前10个字符中解决了如下问题我发送的数据大小接收,服务器端检查接收到的数据,如果是客户端发送的少,则继续接收数据。
所以你需要修改服务器端:
import socketserver
class ThreadedTCPRequestHandler(socketserver.BaseRequestHandler):
def handle(self):
try:
package = self.request.recv(4096)
data_size = package[:10].strip(b'0')
data = package[10:]
while len(data) < int(data_size):
package = self.request.recv(4096)
if not package:
break
data = data + package
self.request.sendall(data)
except ConnectionError as conError:
print(conError)
class ThreadedTCPServer(socketserver.ThreadingMixIn, socketserver.TCPServer):
pass
if __name__ == "__main__":
HOST, PORT = "localhost", 50007
print('Server start work!')
server = ThreadedTCPServer((HOST, PORT), ThreadedTCPRequestHandler)
ip, port = server.server_address
try:
server.serve_forever()
except KeyboardInterrupt:
print('Server stop by Keyboard Interrupt.')
客户端:
def send_msg(data):
import socket
HOST = 'localhost'
PORT = 50007
reply = ''
try:
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((HOST, PORT))
s.sendall(str(len(data)).encode().zfill(10)+data)
while True:
data = s.recv(4096)
if not data:
break
reply = reply+data.decode()
except OSError as err:
reply = err
finally:
return reply
#some.txt is big txt file
with open(r'some.txt', 'rb') as of:
print(send_msg(of.read()))
关于python - 如何使用 socketserver 接收大文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30644073/
我正在尝试学习 Java 网络编程,但遇到了一些障碍。我已经编写了服务器和客户端,但每次尝试连接它们时,我都会立即收到连接关闭错误。然后,我尝试编辑它,但现在出现连接拒绝错误。放弃了这一点,我决定在一
scala.tools.util.SocketServer 的用途是什么? 最佳答案 它是编译器的一部分,而不是标准 scala 库的一部分。其目的是实现fsc 的服务器通信。 (快速 Scala 编
我正在使用 SocketServer 启动一个简单的 TCP 服务器: class ThreadedTCPServer(SocketServer.ThreadingMixIn, SocketServe
因此,我找到了以下示例代码,该示例代码允许在给定的URL和端口处建立基本的python HTTP服务器。我对Web服务器缺乏经验,并且正在尝试为此服务器的某些GET请求创建处理程序。但是,当远程访问此
我正在尝试制作Java套接字服务器,它有框架,可以在其中显示消息。 但是当我从框架构造函数运行服务器时,框架不可见。 我的代码的一部分: 调用框架: public static void ma
我在Python中使用TCP服务器,它实现了这个类: class ThreadedTCPServer(SocketServer.ThreadingTCPServer): pass 它的正常使用
抱歉,如果这个问题太基础了 - 这是我第一次尝试在 Python 中使用多线程套接字。 基本上,我正在尝试编写代码来获取 UDPServer 套接字接收的数据;套接字本身在线程内运行。 为了使主线程可
我在应用程序中使用客户端-服务器机制来传输内部数据。服务器部件之一应设计为一次服务一个请求,没有线程,没有积压。我发现奇怪的功能然后使用: serverport = new ServerSocket(
我想在我的 mac 上创建一个 SocketServer。 然而,这似乎是软件包的一些问题。当我尝试这个采样代码时发现 here它引发了属性错误。 import SocketServer class
我一直在四处寻找一种方法来让 SocketServer python 模块在没有成功的情况下监听多播。 有人成功做到了吗? 任何见解将不胜感激! 谢谢 最佳答案 文档 (http://docs.pyt
我正在使用 Python3 的 socketserver 模块创建一个简单的 TCP 服务器。我想获取服务器所服务的服务器的 IP。 我注意到 socketserver(而不是 BaseServer)
我正在尝试实现 SocketServer 以从移动应用程序接收文件: 移动应用程序发送文件大小。 移动应用程序发送文件。 正确接收文件大小。在应用程序中发送所有数据。但是,SocketServer无法
我需要用socketserver搭建一个tcp server。根据他们的文档,我需要继承类 TCPServer,并将它传递给类 BaseRequestHandler 的子类,我重写了方法 handle
下面是我目前使用的代码: #! /usr/bin/python print 'Content-type: application' print '\n\n' import SocketServer i
我是java新手,我无法理解void go()方法的while循环部分。accept()方法等待客户端请求连接到服务器,那么为什么像Print writer等其他语句,没有被执行? 其他语句是否在 w
我只是用 Sockets 和 ServerSockets 进行了一些测试。所以我做了一个小测试程序,但它不起作用。看起来它停在“.accept()”方法的某个地方,但我不知道为什么。有人可以帮忙吗?
我有一个 Android 服务在后台运行,它将使用以下代码: while(true) { ServerSocket server = new ServerSocket(1234); Socke
这是我玩过的代码,但每次我犯错我都无法重新启动它。它对我说端口/套接字已被使用这是第一个问题第二个在我的 MyTCPHandler 中,我怎么知道使用的端口?这是我的代码: # MetaProject
我正在创建一个 UDP SocketServer,如果我收到来自客户端的关闭消息,我想关闭而不是关闭 UDP 连接。 当我收到消息时,将显示 Begin,但不会显示 Finished。我怎样才能退出这
我正在使用 Python 3.1 中的 socketserver 模块运行 Python 服务器。每次我从客户端(客户端成功)获得连接时,我的服务器都会收到一个错误。这是我的代码: import so
我是一名优秀的程序员,十分优秀!