gpt4 book ai didi

c# - 如何在 C# -> Java (Android) 之间进行套接字编程

转载 作者:搜寻专家 更新时间:2023-11-01 08:17:16 25 4
gpt4 key购买 nike

我最近开发了一个适用于 Windows 和 Android 的服务器/客户端应用程序,它允许通过套接字连接将文件从 Windows 发送到 Android 手机。

它对单个文件非常有用,但试图在单个流中发送多个文件却给我带来了问题。我还意识到,除了二进制数据之外,我还需要通过套接字发送消息来指示错误状态和其他应用程序消息。我在网络编程方面经验不足,不知道什么是最好的前进方式。

基本上,应用程序的 C# 服务器端只是进入监听状态并使用 Socket.SendFile 传输文件。在 Android 上,我使用标准的 Java Socket.getInputStream() 来接收文件。这对于单个文件传输非常有效,但我应该如何处理多个文件和错误/消息信息?我需要为每个文件使用不同的套接字吗?我应该使用更高级别的框架来处理这个问题还是可以通过单个套接字发送所有内容?对于框架或学习 Material 还有其他建议吗?

最佳答案

基本上你必须定义某种数据传输协议(protocol)。您可以尝试查找现有协议(protocol)或定义您自己的协议(protocol)。现在你的协议(protocol)定义如下:

  • 客户端连接到服务器
  • 服务器发送文件内容并终止连接
  • 客户端接收文件内容直到连接终止

通过 TCP 套接字进行通信意味着通常您必须将连接视为双向字节流。设计协议(protocol)的最佳方式是让它描述将要发送的内容,以便接收方知道会发生什么。

要解决您的问题,您的协议(protocol)可能如下所示:

  • 客户端连接到服务器
  • 服务器发送它将传输的文件数(作为 4 字节整数),
  • 客户端接收它将接收的文件数(作为 4 字节整数),
  • 服务器发送第一个文件的大小(作为 4 字节整数 - 但这会将最大文件大小限制为 4GB)
  • 客户端收到第一个文件的大小
  • 服务器发送第一个文件的内容
  • 客户端接收第一个文件的内容 - 它从 TCP 流中读取与第一个文件大小相同的字节数,
  • 服务器发送第二个文件的大小
  • ....
  • 发送所有文件后,服​​务器关闭连接
  • 客户端收到最后一个文件后,等待服务器关闭连接,关闭连接

您可以通过发送文件名(前面有文件名长度)或一些确认或错误代码来丰富这个简单的协议(protocol)。您可以将文件内容以 n 字节 block 的形式发送,每个 block 后都带有校验和,客户端必须对此进行验证。您的想象力是唯一的限制。

关于c# - 如何在 C# -> Java (Android) 之间进行套接字编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2793542/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com