How to set the source port in the UDP socket in c?

2019-04-20 13:21发布

Can any one tell me how to set the Source port address in the UDP socket ?. My client application needs to send the Packets from the 57002 port to the server port 58007 .

4条回答
爷、活的狠高调
2楼-- · 2019-04-20 13:40

bind(2) it. Use INADDR_ANY address and your port number.

查看更多
够拽才男人
3楼-- · 2019-04-20 13:40
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
查看更多
女痞
4楼-- · 2019-04-20 13:43
 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));
查看更多
小情绪 Triste *
5楼-- · 2019-04-20 13:47
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

#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;
}
查看更多
登录 后发表回答