当前位置: 首页 > article >正文

TCP/IP网络编程:理解网络编程和套接字

TCP/IP网络编程:理解网络编程和套接字

网络编程又叫做套接字编程,是因为在网络编程中依赖使用套接字(socket),网络编程一般是C/S架构,即客户端/服务器模式,在服务器端依赖套接字绑定自身接口,并开启监听客户端连接,然后进行读写操作;客户端则依赖套接字进行接口连接,以进行收发操作。

服务器端

服务器端遵循以下步骤进行搭建

  1. 创建套接字
  2. 绑定监听端口
  3. 开始监听
  4. 接受连接
  5. 进行读写操作
  6. 关闭连接

下面是创建服务器端通讯的实例

//步骤1:创建套接字
    int server_sock;
    server_sock = socket(PF_INET,SOCK_STREAM,0);
    if (server_sock == -1)
    {
        error_handing("socket() error");
    }
    
    //步骤2:绑定监听端口
    struct sockaddr_in server_addr;
    memset(&server_addr,0,sizeof(server_addr));
    server_addr.sin_family = AF_INET;
    server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
    server_addr.sin_port = htons(atoi("3333"));
    if (bind(server_sock,(struct sockaddr *)&server_addr,sizeof(server_addr)) == -1)
    {
        error_handing("bind() error");
    }

    //步骤3:开启监听
    if (listen(server_sock,5) == -1)
    {
        error_handing("listen() error");
    }
    
    //步骤4:接受连接
    int accept_sock;
    struct sockaddr accept_addr;
    socklen_t len = sizeof(accept_addr);
    accept_sock = accept(server_sock,&accept_addr,&len);
    if (accept_sock == -1)
    {
        error_handing("accept() error");
    }
    
    //步骤5:开始通讯
    char message[10];
    if (read(accept_sock,message,10) == -1)
    {
        error_handing("read() error");
    }
    
    printf("Read message is %s\n",message);
    if (write(accept_sock,message,10) == -1)
    {
        error_handing("write() error");
    }

    //步骤6:关闭连接
    close(accept_sock);
    close(server_sock);

客户端

客户端遵循以下步骤进行搭建

  1. 创建套接字
  2. 指定端口连接
  3. 进行通讯
  4. 关闭连接

下面是创建客户端通讯的实例

//步骤1:创建套接字
    int client_sock;
    client_sock = socket(PF_INET,SOCK_STREAM,0);
    if (client_sock == -1)
    {
        error_handing("socket() error");
    }

    //步骤2:连接端口
    struct sockaddr_in connect_addr;
    connect_addr.sin_family = AF_INET;
    connect_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
    connect_addr.sin_port = htons(3333);
    if (connect(client_sock,(struct sockaddr *)&connect_addr,sizeof(connect_addr)) == -1)
    {
        error_handing("connect() error");
    }
    
    //步骤3:进行通讯
    if (write(client_sock,"nihao",sizeof("nihao")) == -1)
    {
        error_handing("write() error");
    }
    char buffer[30];
    if (read(client_sock,buffer,30) ==  -1)
    {
        error_handing("read() error");
    }
    printf("Receive message is %s\n",buffer);
    
    //步骤4:关闭连接
    close(client_sock);

网络套接字和文件描述符

在Linux环境中,操作网络套接字和文件描述符是一样的,上面实例中使用write()和read()函数操作网络套接字,
用法跟操作文件描述符别无二致,操作系统自动绑定了0、1、2对应I/O描述符的标准输入、标准输出和标准错误


http://www.kler.cn/a/375163.html

相关文章:

  • Linux挖矿程序排查
  • 专栏二十三:Python读取和分析空间数据的经验杂谈
  • 蓝牙协议——音量控制
  • 【Object字段缺失】JS的对象在更新后发现Key值消失
  • QT用Enigmavb 打包成单独exe
  • 论文《Vertical Federated Learning: Concepts, Advances, and Challenges》阅读
  • 【面试每日一题之CSS】2、line-height和heigh区别
  • Spring Boot实战:打造现代租房管理系统
  • 如何用猿大师办公助手实现OA系统中Word公文/合同在线编辑及流转?
  • YOLOv6-4.0部分代码阅读笔记-loss_fuseab.py
  • Gitee push 文件
  • 【CRM系统选型指南:国内九大主流工具比较】
  • 专业140+总分430+四川大学854信号与系统考研川大原951电子信息与通信工程,真题,大纲,参考书。
  • 《证据规定》之对鉴定意见异议的处理
  • java项目之基于springboot的疾病防控综合系统的设计与实现(springboot)
  • 微信jssdk在企业微信中失效
  • BGP路径属性与路由反射器
  • 下划线命名转驼峰
  • 链表 算法专题
  • NCCL安装(Ubuntu等)
  • Python -- 网络爬虫
  • 如何将ppt转换成word文档?8款ppt转word免费的软件大揭秘,值得收藏!
  • js的小知识
  • 小牛视频翻译 ( 视频翻译 字幕翻译 字幕转语音 人声分离)
  • mysql增量同步工具有哪些
  • 打印室预约系统|基于java和小程序的打印室预约系统设计与实现(源码+数据库+文档)