如何通过UDP套接字发送一个整数?(C语言)
How to send an integer via UDP scokets?( C language)
客户端代码:
int main() {
int sockfd;
char buffer[MAXLINE];
char *msg;
struct sockaddr_in servaddr;
// Creating socket file descriptor
if ( (sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0 ) {
perror("socket creation failed");
exit(EXIT_FAILURE);
}
memset(&servaddr, 0, sizeof(servaddr));
// Filling server information
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(PORT);
servaddr.sin_addr.s_addr = INADDR_ANY;
int ch,n, len;
printf("Enter '1' for Reversal of String.\n");
printf("Enter '2' for number to binary conversion. \n");
printf("Enter '3' for Echo server implementation. \n");
scanf("%d",&ch);
send(sockfd, int &ch, sizeof(ch),0);
close(sockfd);
return 0;
}
在这里,我想将变量ch发送到服务器。
上面的客户端程序在编译时给出了一个错误,说 -
error: expected expression before ‘int’
send(sockfd, int &ch, sizeof(ch),0,0);
error: too few arguments to function ‘send’
send(sockfd, int &ch, sizeof(ch),0,0);
另外,i如何在服务器接收发送的整数?
您不要在函数调用中放置类型声明,只需放置表达式即可。应该是:
send(sockfd, &ch, sizeof(ch), 0);
但是,由于您没有调用connect()
,您需要使用sendto()
而不是send()
,所以您可以指定服务器地址。
sendto(sockfd, &ch, sizeof(ch), 0, (struct sockaddr*)&servaddr, sizeof(servaddr));
在服务器上您使用 recvfrom()
类似。
nread = recvfrom(sockfd, &ch, sizeof(ch), 0, (struct sockaddr*)&clientaddr, &clientaddr_len);
客户端代码:
int main() {
int sockfd;
char buffer[MAXLINE];
char *msg;
struct sockaddr_in servaddr;
// Creating socket file descriptor
if ( (sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0 ) {
perror("socket creation failed");
exit(EXIT_FAILURE);
}
memset(&servaddr, 0, sizeof(servaddr));
// Filling server information
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(PORT);
servaddr.sin_addr.s_addr = INADDR_ANY;
int ch,n, len;
printf("Enter '1' for Reversal of String.\n");
printf("Enter '2' for number to binary conversion. \n");
printf("Enter '3' for Echo server implementation. \n");
scanf("%d",&ch);
send(sockfd, int &ch, sizeof(ch),0);
close(sockfd);
return 0;
}
在这里,我想将变量ch发送到服务器。 上面的客户端程序在编译时给出了一个错误,说 -
error: expected expression before ‘int’
send(sockfd, int &ch, sizeof(ch),0,0);
error: too few arguments to function ‘send’
send(sockfd, int &ch, sizeof(ch),0,0);
另外,i如何在服务器接收发送的整数?
您不要在函数调用中放置类型声明,只需放置表达式即可。应该是:
send(sockfd, &ch, sizeof(ch), 0);
但是,由于您没有调用connect()
,您需要使用sendto()
而不是send()
,所以您可以指定服务器地址。
sendto(sockfd, &ch, sizeof(ch), 0, (struct sockaddr*)&servaddr, sizeof(servaddr));
在服务器上您使用 recvfrom()
类似。
nread = recvfrom(sockfd, &ch, sizeof(ch), 0, (struct sockaddr*)&clientaddr, &clientaddr_len);