【问题标题】:Sample C code to compensate for TCP stream sockets?补偿 TCP 流套接字的示例 C 代码?
【发布时间】:2013-09-29 02:59:26
【问题描述】:

我是套接字编程的初学者。我正在寻找示例 c 代码来弥补 tcp 是基于流的事实,即客户端中的一个发送可能不等于服务器中的 recv。

我如何确保当我从客户端发送这样的消息时:

strcpy(send_data, "Hello Server");
send(sock,send_data,strlen(send_data), 0);

它会在服务器端准确地接收到..

我知道 tcp 是基于流的,因此消息可能会变得支离破碎,并且可能需要在服务器上进行多次 recv 调用才能获取整个消息。

但是如何让服务器一直接收直到收到完整的消息?

我知道它背后的理论.. 我正在寻找 C 语言中的示例(最好是客户端和服务器端的完整代码)

【问题讨论】:

  • “最好是客户端和服务器端的完整代码”。查看 Stevens Unix 网络编程一书。
  • 您可能会发现旧的但很好的Beej's guide 对套接字编程很有用。

标签: c sockets tcp client-server tcpclient


【解决方案1】:

首先,您创建一个协议。如果它总是一个 c 风格的字符串,你可以只寻找一个 NUL 终止符。

然后您在收到数据时读取数据并将其放入缓冲区。然后你解析缓冲区寻找你的终结者,处理数据(无论这对你的应用程序意味着什么),然后从缓冲区中删除它。

这也是您发送的方式,因为您永远不知道每次调用发送时会发送多少数据。将要发送的内容放入本地内存缓冲区,调用发送,然后删除实际从本地缓冲区发送的字节数。

此外,Stack Overflow 不是一个要求人们将示例代码指向您的网站 - 这就是 Google。这是一个发布您的代码并让人们帮助您找出问题所在的地方。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-30
    • 1970-01-01
    • 2015-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多