Я пытаюсь отправить структуру на сервер, но когда я запускаю сервер, данные всегда равны нулю.
Вот определение структуры как на стороне клиента, так и на сервере:
typedef struct {
unsigned char a;
unsigned char b;
unsigned char c;
}S_sendtoScreen;
Содержание основной функции клиента ниже:
S_sendtoScreen sendtoScreen,net_sendtoScreen;
sendtoScreen.a = 1;
sendtoScreen.b = 2;
sendtoScreen.c = 3;
net_sendtoScreen.a = htons(sendtoScreen.a);
net_sendtoScreen.b = htons(sendtoScreen.b);
net_sendtoScreen.c = htons(sendtoScreen.c);
// Filling client information
servaddr.sin_family = AF_INET; // IPv4
servaddr.sin_addr.s_addr = inet_addr("127.0.0.1");机 IP
servaddr.sin_port = htons(8882);
// Filling server information loccal port 8082
clientaddr.sin_family = AF_INET;
clientaddr.sin_port = htons(8881);
clientaddr.sin_addr.s_addr =htonl(INADDR_ANY);
if (bind(sockfd, (const struct sockaddr *)&clientaddr,
sizeof(clientaddr)) == SOCKET_ERROR)
{
perror("bind failed");
getchar();
}
int n, len;
len = sizeof(struct sockaddr);
while (1){
//int nochecksum = 0;
//setsockopt(sockfd, IPPROTO_IP, IPPROTO_UDP, &nochecksum, sizeof(nochecksum));
memcpy(buffer,&net_sendtoScreen,sizeof(net_sendtoScreen));
if((n = sendto(sockfd, (const char *)buffer, sizeof(buffer),
0, (const struct sockaddr *) &servaddr,sizeof(servaddr)))<0)
{
printf("send error\n");
}
printf("n=%d", n);
printf("struc sendtoScreen message sent.\n");
Sleep(200);
}
А вот код сервера ниже:
servaddr.sin_family = AF_INET; // IPv4
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(8882);
cliaddr.sin_family = AF_INET; // IPv4
cliaddr.sin_addr.s_addr = inet_addr("127.0.0.1");
cliaddr.sin_port = htons(8881);
с помощью recvfrom () принять структуру:
int len, n,m;
len = sizeof(struct sockaddr_in);
while (1){
FD_ZERO(&fds);
FD_SET(sockfd, &fds);
rc = select(0, &fds, NULL, NULL, &wait);
if (rc == 0)
{
printf("time out\n");
}
else if (rc < 0){
perror("select() error\n");
}
else if (FD_ISSET(sockfd, &fds))
{
n = recvfrom(sockfd, (char *)buffer, MAXLINE, 0,
(struct sockaddr *) &cliaddr, &len);
if (n < 0){
printf("recvfrom() error,can't recieve the package\n");
}
else{
printf("recvbytes = %d\n", n);
buffer[n] = "\0";
memcpy(&net_recvFromBoard, buffer, sizeof(buffer));
recvFromBoard.a = ntohs(net_recvFromBoard.a);
recvFromBoard.b = ntohs(net_recvFromBoard.b);
recvFromBoard.c = ntohs(net_recvFromBoard.c);
//this three value always equal to zero
printf("recvFromBoard.a = %u,recvFromBoard.b =
%u,recvFromBoard.c = %u", net_recvFromBoard.a,
net_recvFromBoard.b,net_recvFromBoard.c);
}
}
Надеюсь на вашу помощь, заранее спасибо.