我有一个学校的任务,一部分是发送一套整数,字符char *从客户端到服务器使用套接字编程。发送整数或字符工作得很好,但有什么办法可以将整个结构作为一个包发送吗?阅读关于序列化,但我似乎无法使其工作。这里有一个代码片段:发送数据从一个结构,套接字编程
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
的数据。
您需要阅读http://en.wikipedia.org/wiki/Serialization。无法发送指针。即char * –
另外,TCP是一个STREAM服务,而recv()返回一个你需要使用的值。 –