Linux——网络(2)

一、通信 --- 不同主机上进程间的通信

  1、IP和端口号

    IP:标识网络中的一台主机 
           本质上 32位的整型数据 
  端口号:
           标识某个进程 
           本质上 16位的整型数据

  2、udp和tcp

  udp的特点:

  •   1.无连接
  •   2.不可靠 

  tcp的特点:

  •   1.面向链接 
  •   2.可靠传输 

  二、udp编程(c/s模型 )

  客户端
  socket 
  sendto 
  ...
  
  服务器端  ---把自己的地址公布出去 
  socket  
  bind //绑定 
  recvfrom 
  ...

1、recvfrom 函数

ssize_t recvfrom(int sockfd,    //socket的fd
                            void *buf,    //保存数据的一块空间的地址 
                           size_t len,    //这块空间的大小 
                              int flags,    // 0  默认的接收方式 --- 阻塞方式 
  struct sockaddr *src_addr,    //用来保存发送方的地址信息 
              socklen_t *addrlen     //表示发送方实际的地址信息大小
         );
         
返回值:
            成功 返回接收到的字节数 
            失败  -1 

2、bind 函数

int bind(int sockfd, struct sockaddr *my_addr, socklen_t addrlen);
功能:如果该函数在服务器端调用,则表示将参数1相关
           的文件描述符文件与参数2 指定的接口地址关联,
           用于从该接口接受数据。

           如果该函数在客户端调用,则表示要将数据从
           参数1所在的描述符中取出并从参数2所在的接口
           设备上发送出去。

      注意:
            如果是客户端,则该函数可以省略,由默认接口发送数据。
参数:
          sockfd                         之前通过socket函数创建的文件描述符,套接字id
       my_addr                        是物理接口的结构体指针。表示该接口的信息。

struct sockaddr                     通用地址结构 --- ip + 端口 
      {
          u_short sa_family;      地址族
          char sa_data[14];       地址信息
      };

3、转换网络地址

      转换成网络地址结构如下:
      struct sockaddr_in                //网络地址结构
      {
          u_short           sin_family; //地址族
          u_short           sin_port;    //地址端口
          struct in_addr  sin_addr;   //地址IP  //"192.168.1.123"
          char               sin_zero[8]; //占位
      };
 (in_addr_t  === unsigned int )
      struct in_addr
      {
          in_addr_t s_addr;
      }

三、tcp编程(c/s模式)

1、tcp 客户端

1).建立连接
socket          //买了一部手机 
bind //可选   //插上sim卡 
connect       //拨打电话 
....
2).通信过程 
read 
write 
close 

2、tcp服务器

1).建立连接 
socket     //买了一部手机 
bind        //插上sim卡 
listen      //监听 客户端的连接请求 
accept   //接听 ---这一步完成之后 连接就建立好了,之后就可以收发数据  
..... 
2).通信过程 
read 
write 
close 

3、tcp的建立过程

tcp三次握手  :

4、connect 函数

int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen);
   功能:该函数固定有客户端使用,表示从当前主机向目标
             主机发起链接请求。
   参数:sockfd 本地socket创建的套接子id
                 addr 远程目标主机的地址信息。
            addrlen 参数2的长度。
   返回值:成功 0
                 失败 -1;
   struct sockaddr *addr //通用地址结构类型,并没有实际去用,实际用到都是具体地址结构类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值