【发布时间】:2013-11-28 19:08:39
【问题描述】:
我有一个学校作业,其中一部分是使用套接字编程从客户端向服务器发送一组 int、chars char*。发送整数或字符工作得很好,但是有没有办法将整个结构作为一个数据包发送?阅读有关序列化的信息,但我似乎无法使其工作。这是一个代码sn-p:
The struct looks like this:
struct Msg
{
int a;
char b;
char *user;
};
Client:
init variables and such...
int netcom(char* ip, int port) {
sd = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
// clear the structure
bzero(&serveraddr, sizeof(struct sockaddr_in));
serveraddr.sin_family = AF_INET;
// add the server adress
inet_pton(AF_INET, ip, &serveraddr.sin_addr);
// add the port number
serveraddr.sin_port = htons(port);
// connect
connect (sd,(struct sockaddr*)&serveraddr, sizeof(struct sockaddr_in));
}
int sendPkg(struct Msg msg) {
send(sd, &msg, sizeof(msg), 0);
}
而服务器中接收的部分是这样的:
char buf[100];
recv(sd[i], buf, sizeof(buf)-1, 0);
客户端发送完全正常,服务器接收正常。但我不知道我要发送什么,以及如何正确阅读它。所以这就是我的问题。如何使用套接字从struct 正确发送数据。
【问题讨论】:
-
你需要阅读en.wikipedia.org/wiki/Serialization。无法发送指针。即 char*
-
另外,TCP 是一个 STREAM 服务,recv() 返回一个你需要使用的值。
标签: c sockets struct send recv