我有一個學校的任務,一部分是發送一套整數,字符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()返回一個你需要使用的值。 –