任何人都可以告诉我如何在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
以上就是c/c++开发分享如何在c中的UDP套接字中设置源端口?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/562175.html