网络间通信

1、udp通信

特点:(1)无连接

(2)不可靠

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


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

 绑定

 int bind(int sockfd, struct sockaddr *my_addr,  socklen_t addrlen);

 发送

ssize_t sendto(    int sockfd,  //用于通信的socket对应的fd
                  const void *buf,  //表示要发送的数据所在的一块空间 
                       size_t len,  //表示发送的字节数 
                        int flags,  //0  --- 默认  
 const struct sockaddr *dest_addr,  //表示 要发送到的 地址 (网络地址 ip+端口号 ) 
                socklen_t addrlen   //表示dest_addr 这个参数的长度 
                );

int main(int argc, const char *argv[])
{
    int fd = socket(AF_INET,SOCK_DGRAM,0);
    if (fd < 0)
    {
        perror("socket fail");
        return -1;
    }
    printf("fd = %d\n",fd);
    
    struct sockaddr_in seraddr;
    seraddr.sin_family = AF_INET;
    seraddr.sin_port = htons(50000);
    seraddr.sin_addr.s_addr = inet_addr("192.168.147.1");
 
    if(bind(fd, (struct sockaddr *)&seraddr,sizeof(seraddr)) < 0)
    {
        perror("bind fail");
        return -1;
    }
 
    struct sockaddr_in srcaddr;
    socklen_t addrlen = sizeof(srcaddr);
    char buf[1024];
    while(1)
    {
        recvfrom(fd,buf,sizeof(buf),0,(struct sockaddr*)&srcaddr, &addrlen);
        printf("---------------------------\n");
        printf("IP   = %s\n", inet_ntoa(srcaddr.sin_addr));
        printf("post = %d\n", ntohs(srcaddr.sin_port));
        printf("buf = %s\n", buf);
        printf("---------------------------\n");
    }
    return 0;

3、tcp编程

 (1)三次握手

 (2)四次回收

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

 int listen(int sockfd, int backlog);

tcp回发 

 

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值