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

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.lryc.cn/news/474179.html

相关文章:

  • CSS实现回到顶部且平滑过渡
  • 10 go语言(golang) - 数据类型:哈希表(map)及原理(二)
  • 【论文解读】Med-BERT: 用于疾病预测的大规模结构化电子健康记录的预训练情境化嵌入
  • [POI2014] PTA-Little Bird(单调队列优化 DP)
  • 【含开题报告+文档+PPT+源码】基于SpringBoot的体育馆管理系统的设计与实现
  • Vue3学习:vue组件中的图片路径问题
  • openCV基础-图像预处理Day26
  • 给文件添加可读可写可执行权限
  • golang有序map
  • 【LangChain系列4】【Chain模块详解】
  • 51c嵌入式~IO合集1
  • ETLCloud怎么样?深度解析其在数据管理中的表现
  • 高频谐振功放电路
  • kafka如何获取 topic 主题的列表?
  • 全新大模型框架Haystack,搭建RAG pipeline
  • 儿童孤独症专家分享:了解治疗与支持的专业帮助
  • 初始JavaEE篇——多线程(7):定时器、CAS
  • 高精度计算(乘)
  • 在vue中 如何实现跨域
  • 计算机考研,选择西安交通大学还是哈工大?
  • 微积分复习笔记 Calculus Volume 1 - 4.4 The Mean Value Theorem
  • Cpp多态机制的深入理解(20)
  • (六)Python结构数据类型
  • C++进阶-->多态(Polymorphism)
  • python实战项目51:selenium结合requests获取某众点评评论
  • 面试准备第一版ssm spring-springmvc
  • Ubuntu学习笔记 - Day1
  • 挑战Java面试题复习第4天,坚持就是胜利
  • Android 虚拟化框架(AVF)指南
  • day-77 超级饮料的最大强化能量