如何解决使用颤振中的套接字编程将图像发送到服务器
我在 python 中有一个服务器端程序,它需要一个图像,并且在用 python 中的客户端程序测试时工作正常。
我想使用 Flutter 将图像发送到此服务器,但我没有这样做..
这是我的服务器端代码
import socket #server
server = socket.socket(socket.AF_INET,socket.soCK_STREAM) # AF_INET = IP,SOCK_STREAM = TCP
server.bind(('localhost',1112)) # 127.0.0.1
server.listen()
client_socket,client_address = server.accept()
file = open('2.jpg',"wb")
image_chunk = client_socket.recv(1024) # stream-based protocol
while image_chunk:
file.write(image_chunk)
image_chunk = client_socket.recv(1024)
file.close()
client_socket.close()
我曾尝试使用 dio
、http
和 MultiPart
以下是我失败尝试的片段:
-
MultiPart
var uri = Uri.parse('https://10.0.2.2:1112'); var request = MultipartRequest('POST',uri) ..files.add(await multipartfile.fromPath( 'picture',filePath,contentType: MediaType('application','jpeg'))); var response = await request.send(); if (response.statusCode == 200) print('Uploaded!');
-
dio dio = new dio(); FormData formData = new FormData.fromMap({ "file": await multipartfile.fromPath(filePath,filename: basename(filePath),'jpeg'),) }); await dio.post('https://10.0.2.2:1112',data: formData);
我可以创建连接,但无法发送文件。
解决方法
问题是您正在尝试通过 HTTP 请求连接到套接字 api(而不是 websocket,它们是不同的)并且在服务器端希望获得图像字节,但这不会发生,因为您知道 HTTP 有它自己的规范RFC2616。所以你会得到一些 http 标头和正文。
实际上,您可以将 http 请求发送到套接字,但在服务器端,您必须完成繁重的工作。我的意思是逐行读取 http 标头,然后读取 Transfer-Encoding
和 Content-Length
标头以了解如何读取请求的剩余字节,然后解析正文数据。
Content-Length 实体标头指示发送给接收方的实体主体的大小(以字节为单位)。
Transfer-Encoding 标头指定用于安全地将有效负载正文传输给用户的编码形式。
解决方案是:
-
在客户端使用 dart 套接字库,然后通过套接字而不是 http 请求发送图像(此 link 可能会有所帮助)
-
或者像以前一样创建一个 RESTFUL API 并通过 http 请求发送您的图像。
希望能帮到你:)
,既然你正在处理 websocket,你必须检查这个包 web_socket_channel。
您首先需要使用
与您的套接字通道建立连接var channel = IOWebSocketChannel.connect(Uri.parse('ws://localhost:1234'));
要监听来自您的 websocket 频道的更改,您将使用:
channel.stream.listen((message) {
print("NEW MESSAGE");
});
要将数据发送到您的 websocket 通道,您将使用:
channel.sink.add("your data");
最后,不要忘记使用以下命令关闭您的 websocket 通道流:
channel.sink.close();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。