【发布时间】:2011-07-22 03:47:48
【问题描述】:
我编写了一个小的客户端-服务器代码,其中我将整数和字符从客户端发送到服务器。所以我知道 C 中套接字编程的基础知识,比如要遵循的步骤等等。现在我想创建一个数据包并将其发送到我的服务器。我以为我会创建一个结构
struct packet
{
int srcID;
long int data;
.....
.....
.....
};
struct packet * pkt;
在执行 send() 之前,我想我会使用在数据包内写入值
pkt-> srcID = 01
pkt-> data = 1 2 3 4
我需要知道我是否在正确的道路上,如果是,那么我可以使用发送
send(sockfd, &packet, sizeof(packet), 0)
用于接收
recv(newsockfd, &PACKET, sizeof(PACKET), 0)
我刚开始使用网络编程,所以我不确定我是否走在正确的道路上。如果有人能以任何形式(理论、示例等)指导我提出我的问题,那将是非常有帮助的。提前致谢。
【问题讨论】:
-
是的,你在正确的轨道上。但是,如果要具有前瞻性,则不能假设发送方和接收方是相同的架构……因此,您要认真考虑如何在线上对数据进行编码。搜索“序列化”。此外,
recv可以返回比您请求的字节少的字节,因此您始终需要在循环中调用它,直到获得所需的所有字节。 -
感谢您的回复....将记住您的提示。
-
@Nemo:这取决于传输协议。在 TCP 中,是的 recv() 可能会返回更少的字节,但在 UDP 中,recv() 会返回整个数据包。
-
从昨晚开始,当我开始使用这个程序时,当我编译时,我得到了很多解引用错误,我刚开始使用C和C++,所以有点业余指针,我正在发布我的代码,你能解释一下我哪里出错了吗:
标签: c sockets networking network-programming