@
fangdingjun 方法经测试可用,非常感谢。为了方便其他可能遇到问题的人,这里贴上代码(Linux)
#include <stdio.h>
#include <string.h>
#include <arpa/inet.h>
#include <sys/socket.h>
int main()
{
// create socket
int sockfd = socket(AF_INET, SOCK_RAW, IPPROTO_UDP);
if (sockfd < 0)
{
perror("create_socket()");
return -1;
}
// prepare target address
sockaddr_in addr;
memset(&addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = inet_addr("8.8.8.8");
addr.sin_port = htons(33435);
// connect
connect(sockfd, (sockaddr *)&addr, sizeof(addr));
// prepare local address
sockaddr_in local_addr;
unsigned int len = sizeof(local_addr);
getsockname(sockfd, (sockaddr *)&local_addr, &len);
// output
printf("local address: %s\n", inet_ntoa(local_addr.sin_addr));
return 0;
}