如何在c中的UDP套接字中设置源端口?

任何人都可以告诉我如何在UDP套接字中设置源端口地址吗? 我的客户端应用程序需要将数据包从57002端口发送到服务器端口58007。

#include  #include  #include  #include  #include  #include  #include  #include  #define DST_PORT 58007 #define SRC_PORT 57002 #define IP "127.0.0.1" int main(int argc, char *argv[]) { struct sockaddr_in addr, srcaddr; int fd; char message[] = "Hello, World!"; if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { perror("socket"); exit(1); } memset(&addr, 0, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_addr.s_addr = inet_addr(IP); addr.sin_port = htons(DST_PORT); memset(&srcaddr, 0, sizeof(srcaddr)); srcaddr.sin_family = AF_INET; srcaddr.sin_addr.s_addr = htonl(INADDR_ANY); srcaddr.sin_port = htons(SRC_PORT); if (bind(fd, (struct sockaddr *) &srcaddr, sizeof(srcaddr)) < 0) { perror("bind"); exit(1); } while (1) { if (sendto(fd, message, sizeof(message), 0, (struct sockaddr *) &addr, sizeof(addr)) < 0) { perror("sendto"); exit(1); } sleep(1); } return 0; } 

bind(2)它。 使用INADDR_ANY地址和您的端口号。

  struct sockaddr_in sa; int ret, fd; memset(&sa, 0, sizeof(struct sockaddr_in)); sa.sin_family = AF_INET; sa.sin_port = htons(LOCAL_PORT); sa.sin_addr.s_addr = inet_addr(LOCAL_IP_ADDRESS); ret = bind(fd, (struct sockaddr *)&sa, sizeof(struct sockaddr)); 
 struct sockaddr_in servaddr,cliaddr; sockfd=socket(AF_INET,SOCK_DGRAM,0); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr=inet_addr(argv[1]); servaddr.sin_port=htons(32000); //destination port for incoming packets cliaddr.sin_family = AF_INET; cliaddr.sin_addr.s_addr= htonl(INADDR_ANY); cliaddr.sin_port=htons(33000); //source port for outgoing packets bind(sockfd,(struct sockaddr *)&cliaddr,sizeof(cliaddr)); use sendto with servaddr use recvfrom with cliaddr if u check wireshark u will see source port as 33000 and destination port as 32000 for sendto operation