我正在研究客户端/服务器项目,这需要我编写自己的解决方案,而不是使用已经制定的解决方案。我的一个要求是我需要服务器在Linux上运行,客户端在Windows上运行。另一个要求是我需要我的解决方案来支持尽可能多的Windows操作系统。这些要求使我开发了针对.NET Framework 2.0的C#,用于客户端和服务器 - 客户端将使用Visual Studio构建,而服务器将使用Mono构建。
我正在开发的部分解决方案将要求我传输这两个消息(不像聊天程序,这些将是客户端和服务器应用程序本身的更多操作指令),以及将文件传输到和来自客户端和服务器。
这里我被卡住了 - 插座。我试图弄清楚如何传输一个文件,以及当我不相信我需要时,为什么我会碰壁试图编写自己的协议。我使用的是套接字,而不是TCPClient,我已经按照MSDN上的示例创建了异步客户端和服务器,但只是试图发送文件完全停止。
我认为我被卡住的原因是因为我对套接字开发的无知(最重要的是,我不是开发人员 - 我擅长即时研究和学习)。我可以找到的用于传输文件的所有示例都只显示了如何执行此操作的代码示例。我对更多代码示例不感兴趣,我需要了解幕后发生的事情。当我调用Socket.BeginReceive方法时,它有什么期望,我怎么知道客户端会发送更多?我是否需要将发送的数据分解为适合TCP数据包的块,或者.NET是否为我做了这些?如果.NET正在分解数据,那么进入我为套接字定义的缓冲区的是什么?在将TCP数据包交给我的代码之前,缓冲区是否等到TCP数据包已填满?
简而言之,我认为我需要的是有人解释如何完成套接字文件传输 - 而不是如何完成它。