【问题标题】:How to send an integer via UDP scokets?( C language)如何通过 UDP 套接字发送整数?(C 语言)
【发布时间】:2023-03-29 18:00:01
【问题描述】:

客户端代码:

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如何在服务器接收发送的整数?

【问题讨论】:

  • 您将大量参数传递给许多函数,但在其他任何地方都没有为参数添加类型前缀。为什么你认为你需要为那个特定的函数参数这样做?

标签: c sockets network-programming


【解决方案1】:

您不要在函数调用中放置类型声明,只需放置表达式即可。应该是:

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()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-31
  • 2010-12-30
相关资源
最近更新 更多