如何通过UDP范围发送整数?(C语言)

如何通过UDP范围发送整数?(C语言),c,sockets,network-programming,C,Sockets,Network Programming,客户端代码: 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("sock

客户端代码:

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; 
} 

另外,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);

您将许多参数传递给许多函数,但在其他任何地方都不会使用类型作为参数的前缀。为什么您认为需要为特定的函数参数执行此操作?“但是,您需要使用
sendto()
而不是
send()
”——除非您事先调用了
connect()
。您可以
connect()
将UDP套接字连接到对等方
sockaddr
,然后可以使用
send()
/
recv()
而不是
sendto()
/
recvfrom()
nread = recvfrom(sockfd, &ch, sizeof(ch), 0, (struct sockaddr*)&clientaddr, &clientaddr_len);