加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 服务器 > 搭建环境 > Unix > 正文

UNIX网络编程:UDP 中的外出接口的确定

发布时间:2016-09-09 21:19:09 所属栏目:Unix 来源:站长网
导读:已连接UDP套接字还可用来确定用于特定目的地的外出接口。这是由connect函数应用到UDP套接字时的一个副作用造成的:内核选择本地IP地址。这个本地IP地址通过为目

已连接UDP套接字还可用来确定用于特定目的地的外出接口。这是由connect函数应用到UDP套接字时的一个副作用造成的:内核选择本地IP地址。这个本地IP地址通过为目的IP地址搜索路由表得到外出接口,然后选用该接口的主IP地址而选定。

注意:getsockname函数调用的位置。

#include <unistd.h>  
#include <sys/types.h>  
#include <sys/socket.h>  
#include <netinet/in.h>  
#include <arpa/inet.h>  
#include <stdlib.h>  
#include <stdio.h>  
#include <errno.h>  
#include <string.h>  
       
#define SERV_PORT 3333  
#define MAXLINE 1024  
#define ERR_EXIT(m) 
        do 
        {   
                perror(m);   
                exit(EXIT_FAILURE); 
        } while(0)  
       
typedef struct sockaddr SA;  
int main(int argc, char **argv)  
{  
    int                 sockfd;  
    socklen_t           len,peer_len;  
    struct sockaddr_in  cliaddr, servaddr,peer_addr;  
       
    if (argc != 2)  
        ERR_EXIT("usage: udpcli <IPaddress>");  
       
    sockfd = socket(AF_INET, SOCK_DGRAM, 0);  
       
    bzero(&servaddr, sizeof(servaddr));  
    servaddr.sin_family = AF_INET;  
    servaddr.sin_port = htons(SERV_PORT);  
    inet_pton(AF_INET, argv[1], &servaddr.sin_addr);  
       
    connect(sockfd, (SA *) &servaddr, sizeof(servaddr));  
       
    len = sizeof(cliaddr);  
    getsockname(sockfd, (SA *) &cliaddr, &len);  
    printf("local address %s and port = %dn", inet_ntoa(cliaddr.sin_addr),ntohs(cliaddr.sin_port));  
    getpeername(sockfd,(SA *) &peer_addr, &peer_len);  
    printf("peer address %s and port = %dn", inet_ntoa(peer_addr.sin_addr),ntohs(peer_addr.sin_port));  
    exit(0);  
}

运行结果:

huangcheng@ubuntu:~$ ./cli 192.168.2.103  
local address 192.168.2.103 and port = 53271  
peer address 192.168.2.103 and port = 3333

作者:csdn博客 ctthuangcheng

查看本栏目更多精彩内容:http://www.bianceng.cn/OS/unix/

(编辑:应用网_丽江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读