zoukankan      html  css  js  c++  java
  • Linux 网络编程一步一步学(二)绑定IP 和端口

        1 #include <stdio.h>                                                                                                     
        2 #include <string.h>
        3 #include <errno.h>
        4 #include <sys/socket.h>
        5 #include <resolv.h>
        6 #include <stdlib.h>
        7 #include <netinet/in.h>
        8 #include <arpa/inet.h>
        9 #include <unistd.h>
       10 #define MAXBUF 1024
       11 int main(int argc, char **argv)
    -  12 {
    |  13     int sockfd;
    |  14     struct sockaddr_in dest, mine;
    |  15     char buffer[MAXBUF];
    -  16     if (argc != 5) {
    2  17         printf("参数格式错误!正确用法如下:\n\t\t%s 对方IP 地址 对方端口 本机IP 地址 本机端口\n\t比如:\t%s 127.0.0.1 82     0\n此程序用来以本机固定的端口从某个 IP 地址的服务器某个端口接收最多MAXBUF 个字节的消息",argv[0], argv[0]);
    2  18         exit(0);
    2  19     }
    |  20     /* 创建一个 socket 用于 tcp 通信 */
    -  21     if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
    2  22         perror("Socket");
    2  23         exit(errno);
    2  24     }
    |  25     /* 初始化服务器端(对方)的地址和端口信息 */
    |  26     bzero(&dest, sizeof(dest));
    |  27     dest.sin_family = AF_INET;
    |  28     dest.sin_port = htons(atoi(argv[2]));
    -  29     if (inet_aton(argv[1], (struct in_addr *) &dest.sin_addr.s_addr) == 0) {
    2  30         perror(argv[1]);
    2  31         exit(errno);
    2  32     }
    |  33     /* 初始化自己的地址和端口信息 */
    |  34     bzero(&mine, sizeof(mine));
    |  35     mine.sin_family = AF_INET;
    |  36     mine.sin_port = htons(atoi(argv[4]));
    -  37     if (inet_aton(argv[3], (struct in_addr *) &mine.sin_addr.s_addr) == 0) {
    2  38         perror(argv[3]);
    2  39         exit(errno);
    2  40     }
    |  41     /* 把自己的 IP 地址信息和端口与 socket 绑定 */
    -  42     if (bind(sockfd, (struct sockaddr *) &mine, sizeof(struct sockaddr)) == -1) {
    2  43         perror(argv[3]);
    2  44         exit(errno);
    2  45     }
    |  46     /* 连接服务器 */
    -  47     if (connect(sockfd, (struct sockaddr *) &dest, sizeof(dest)) != 0) {
    2  48         perror("Connect ");
    2  49         exit(errno);
    2  50     }
    |  51     /* 接收对方发过来的消息,最多接收 MAXBUF 个字节 */
    |  52     bzero(buffer, MAXBUF);
    |  53     recv(sockfd, buffer, sizeof(buffer), 0);
    |  54     printf("%s", buffer);
    |  55     sleep(10);
    |  56     /* 关闭连接 */
    |  57     close(sockfd);
    |  58     return 0;
    |  59 }
       60   

     1、bind() 函数可以帮助你指定一个套接字使用的端口

      当你使用socket() 函数得到一个套接字描述符,需要将socket 绑定上一个你的机器上的端口。当你需要进行端口监听 listen()操作,等待接受一个连入请求的时候,一般都需要经过这一步。比如网络泥巴(MUD),Telnet a.b.c.d 4000。如果你只是想进行连接一台服务器,也就是进行 connect() 操作的时候,这一步并不是必须的。
      int bind (int sockfd , struct sockaddr *my_addr , int addrlen)  参数说明:
        sockfd 是由socket()函数返回的套接字描述符。
        my_addr 是一个指向struct sockaddr 的指针,包含有关你的地址的信息:名称、端口和IP 地址。
        addrlen 可以设置为sizeof(struct sockaddr)。

  • 相关阅读:
    今天没有写的,唱首歌吧。。
    UILocalNotification实现本地的闹钟提醒的方法。
    又是动画效果~
    c位运算符
    javascript如何调用objectivec的方法
    在tableview索引中显示搜索符号的方法
    检查数据库|| 复制数据库文件
    往sqlite中写入图片二进制数据及读取源码 for iphone
    [Cocoa]深入浅出 Cocoa 之消息(罗朝辉)
    关于malloc问题的改错笔试常考
  • 原文地址:https://www.cnblogs.com/liqiu/p/2981162.html
Copyright © 2011-2022 走看看