为现有的套接字客户端编写套接字服务器

问题描述 投票:0回答:1

我是 Socket 编程新手。我们必须为现有的 C# 套接字客户端编写套接字服务器。协议是 TCP,没有 TLS。服务器代码不可用。 如何确保服务器套接字组件能够响应客户端调用? 我需要注意哪些重要事项? 团队中的某人说我需要实现现有服务器正在使用的相同协议。这是什么意思?

c# sockets serversocket
1个回答
0
投票

套接字只是一种交换字节的机制;交换字节相对容易 - 但您需要知道的是要发送哪些字节(以及接收时:这些字节的含义)。这是有线协议。

您需要弄清楚的第一件事是原始传输详细信息:这是 TCP 吗? UDP?什么端口号?是否涉及 TLS? UDP 是一种数据包协议,TCP 是一种流协议,但无论哪种情况,您都需要了解如何在该协议上表示“消息”。如果这是一个众所周知的协议,则可能有一个您可以阅读的规范 - 甚至更好:预构建的实现。但本质上,您正在寻找诸如 this(RFC6455,Web-sockets)this(RESP===redis) 之类的详细信息。通常定义的第一件事是 framing - 例如,在 UDP 中,它可能像“1 个数据包===1 帧,最大 SOME_NUMBER 字节”一样简单,但在 TCP 中,它更可能是“帧以 14 字节的标头为前缀;该标头的第 3-7 个字节将有效负载长度表示为小端 32 位整数;标头后跟 PAYLOAD_LENGTH 字节” - 或类似的。对于以文本为中心的协议,它可能是“帧终止是 2 个行尾序列,接受(某些指定的 CR/LF 组合/排列)。进一步注意,消息的协议可能不包括数据序列化协议;它可能就像“有效负载是UTF-8编码的文本”一样简单,但它可能是“有效负载是遵循SomeUnknown.proto的protobuf消息”,或者完全定制且未记录的东西。甚至可能没有严格定义(例如,gRPC 通常假设它正在谈论 protobuf,但这不是严格要求的)。其他常见格式可能是 JSON 或 XML,但原始套接字通常比文本更二进制。

© www.soinside.com 2019 - 2024. All rights reserved.