C# 使用套接字传输二进制数据?
我正在考虑制作一个服务器/客户端应用程序来实现这一点:客户端将连接到服务器,服务器将发回一个文件夹列表(可能是音乐或视频),客户端将能够流式传输或下载这些文件夹。我将为此制作一个GUI,这样它就不会是一个纯文本界面。我希望这样,当客户端连接到服务器并获取有关可流式传输/下载的媒体文件的信息时,客户端将在类似浏览器的界面中显示文件夹/文件(文件夹将显示文件夹图标,视频将显示视频图标等) 这对我来说真的很重要,但我真的很想学习更多关于C#的socket编程的知识,并且觉得把手弄脏是最好的方法。正如你所能想象的,我对如何开始这项工作以及我需要做些什么才能使这项工作成功感到困惑 我问题的第一部分是:如果我想让客户机接收文件/文件夹列表,并能够下载/流式传输它们,我是否需要使用套接字传输二进制数据,或者我完全错了?如果我错了,我是否需要使用其他东西,比如文件读取器,并通过套接字使用它们 我的问题的第二部分是:当我将这些信息传递给客户时,如何让客户显示视频、文件夹、MP3等的相应图标。?我在想,如果我必须传输二进制数据,我必须使用这些数据以某种方式用正确的图标/数据填充客户端GUI。我被困在如何处理这件事上。是否有某些方法/类可用于解析数据并执行我想对其执行的操作?同样,我不知道我是否错误地认为需要传输二进制数据,但无论哪种方式,我都不知道处理这个问题需要什么C# 使用套接字传输二进制数据?,c#,visual-studio-2010,sockets,tcp,network-programming,C#,Visual Studio 2010,Sockets,Tcp,Network Programming,我正在考虑制作一个服务器/客户端应用程序来实现这一点:客户端将连接到服务器,服务器将发回一个文件夹列表(可能是音乐或视频),客户端将能够流式传输或下载这些文件夹。我将为此制作一个GUI,这样它就不会是一个纯文本界面。我希望这样,当客户端连接到服务器并获取有关可流式传输/下载的媒体文件的信息时,客户端将在类似浏览器的界面中显示文件夹/文件(文件夹将显示文件夹图标,视频将显示视频图标等) 这对我来说真的很重要,但我真的很想学习更多关于C#的socket编程的知识,并且觉得把手弄脏是最好的方法。正如你
如果我的术语有任何错误,我道歉。我显然还不是C语言方面的专家。) 当然,除非你只想学习,否则你不必像Socket那样进入低级 我建议使用WCF。它将完全满足您的要求,将是灵活的,您将不必直接处理插座 WCF是一个大框架,但您可以很快学会如何使用它 您可以找到如何在Windows中检索和显示文件图标。
如果您的客户端由Windows托管,则无需传输图标,只需按文件名/扩展名检索客户端上的图像。任何时候在计算机之间(或进程之间)发送数据时,您已经在谈论二进制数据了(你可能会争辩说,所有东西都是二进制数据,但当将其作为OO模型使用时,感觉不是这样的)。这里的要点是,你所需要做的就是序列化消息。有无数序列化框架——一些是为了方便,一些是为了一系列功能,而som可以使用这些框架来提高性能(最小带宽等) 即使是内置的也可以工作-例如,您可以使用
XmlSerializer
等来写入流
(例如通常与套接字一起使用的NetworkStream
).就我个人而言,我会使用一些不那么冗长的东西,比如protobuf net,但自从我写了它之后,我就有点偏见了;p
但是,请注意,在使用套接字时,您通常会在会话中发送多条(单独的)消息。为了使每一端都能正确方便地从流中读取每条消息的正确数据,通常会在每条消息前面加上长度(字节数)作为前缀-例如,作为一个固定的4字节的小endianint
。因此读取过程是:
- 读取4个字节
- 将其解释为
,比如int
n
- 读取
字节n
- 通过反序列化程序运行该数据,可能通过
MemoryStream
- 处理消息
- 序列化消息,可能是一个
MemoryStream
- 查询长度并形成4字节前缀
- 写前缀
- 写下数据