(1):TCP网络编程

我们注意到服务端与客户端通信时是通过客户端的套接字相互通信的,那么服务端的套接字主要是干什么用的呢?

TCP服务端设置监听套接字时

int listen(int sock,int backlog);

会一直阻塞在此函数,等待客户端的连接请求。其中 backlog 是设置等待连接请求的队列大小;

当有多个客户端连接一个服务端时,在某个客户端请求连接,直到服务端受理连接时,服务端处于等待连接请求的状态。

客户端请求连接的状态,本身也是一种往网络中发送数据,所以此时服务端想要接收这种数据,就需要套接字,这就是服务端的套接字了。

当多个客户端向某个服务端来请求连接时,服务端套接字一次只能处理一个客户端,所以服务端套接字会把这些请求放入等待连接请求的队列中,队列的大小是由 backlog设置的。当服务端准备好了后,从等待连接请求的队列中取出一个客户端,接受连接。

服务端套接字就像是一个门卫,只是用来处理来自客户端的连接的,(接收此时的数据),并不用来和客户端通信。

服务端与客户端的通信是通过什么方式呢?

当有一个客户端往服务端请求连接时,客户端的请求放在请求连接队列中,当服务端开始处理客户端的连接时,使用

int accept(int sock,struct sockaddr* addr,socklen_t* addrlen) 函数。

该函数调用成功时,会产生一个用于服务端与客户端通信的数据IO套接字,并且返回其文件描述符,通过这个文件描述符,我们就可以和客户端通信了,姑且把这个文件描述符称为服务端的客户端的套接字了。

有了这个文件描述符,我们就可以用read(...),write(...)等函数往这个文件描述符里读和写消息了。

服务端与客户端的断开?

断开服务端与客户端,最直接的方法是 close或者是closesocket函数,但是这样太直接,任何一方关闭了套接字,双发就不能进行通信了。

我们可以采用一种更优雅的方式,基于TCP的半关闭,accept函数会在内部生成一个数据IO套接字,用于双方通信,这个套接字分为了两个部分,读缓冲与写缓冲,相当于一条全双工管道。

当服务端使用:

int shutdown(int sock,int howto);

关闭输出缓冲时,会向客户端发送一个EOF;客户端的read(...)函数,会返回一个-1;但是此时客户端可以通过其输出缓冲,向服务端发送消息,服务端仍然能够接到客户端的信息。这种断开的方式比直接close套接字优雅点。

转载于:https://www.cnblogs.com/coder-chen/p/4496140.html

TCP与UDP网络编程总结(一)相关推荐

  1. TCP、UDP网络编程面试题

    TCP.UDP.Socket.HTTP网络编程面试题 什么是网络编程 网络编程的本质是多台计算机之间的数据交换.数据传递本身没有多大的难度,不就是把一个设备中的数据发送给其他设备,然后接受另外一个设备 ...

  2. C/C++ Socket - TCP 与 UDP 网络编程

    前言 socket编程分为TCP和UDP两个模块,其中TCP是可靠的.安全的,常用于发送文件等,而UDP是不可靠的.不安全的,常用作视频通话等. 如下图: 头文件与库: #include <Wi ...

  3. JAVA UDP网络编程学习笔记

    一.UDP网络编程概述 采用TCP协议通信时,客户端的Socket必须先与服务器建立连接,连接建立成功后,服务器端也会持有客户端连接的Socket,客户端的Socket与服务器端的Socket是对应的 ...

  4. <UDP网络编程>——《计算机网络》

    目录 1. 网络基础知识 1.1 理解源IP地址和目的IP地址 1.2 认识端口号 1.3 理解 "端口号" 和 "进程ID" 1.3.1 理解源端口号和目的端 ...

  5. 【Java】UDP网络编程

    文章目录 前言 DatagramSocket DatagramPacket 注意事项与区别 代码演示 前言 UDP(user datagram protocol)的中文叫用户数据报协议,属于传输层. ...

  6. python交互式编程客户端_【python】UDP网络编程:实现服务端与客户端的交互、简单的AI智能模式...

    关于UDP网络编程 UDP(user datagram protocol)的中文叫用户数据报协议,属于传输层.UDP是面向非连接的协议,它不与对方建立连接,而是直接把要发的数据发给对方. [UDP网络 ...

  7. C语言笔记-26-网络-UDP网络编程

    C语言笔记-26-网络-UDP网络编程 文章目录 C语言笔记-26-网络-UDP网络编程 前言 一.UDP编程模型概括 三.UDP编程模型代码 UDP服务端 UDP客户端 总结 前言 自学笔记,没有历 ...

  8. Java的TCP/UDP网络编程+多线程实现服务器端与客户端间的通信

    写在前面: Java为网络编程提供了丰富的库,我们能通过调用Socket套接字的方法实现服务器与客户端的双通信. 注意点: 需要注意的是端口的对应,端口可以理解为窗户,服务器只能通过某个端口(窗户)与 ...

  9. TCP/UDP(网络编程)

    TCP/UDP(大作业) 文章目录 TCP/UDP(大作业) Java 网络编程 1.1.描述TCP协议和UDP协议,并说出他们的区别与联系: 基于客户机-服务器模式的应用场景 2.什么是客户机-服务 ...

最新文章

  1. 山西农业大学c语言答案,第一章C语言及程序设计概述-东北农业大学教务处.doc...
  2. 2016年全球电信市场资本支出略增0.7%至3140亿美元
  3. 使用DotNetty编写跨平台网络通信程序
  4. 95-33-020-ChannelHandler-ChannelHandler简介
  5. reduce个数究竟和哪些因素有关
  6. Source Insight 4.0 常用设置
  7. STM32F10x 学习笔记4(CRC计算单元 续)
  8. VScode安装并设置SVN插件
  9. plc通讯的握手信号_PLC工程师教你:从原理搞懂RS485串口通讯
  10. 4_unittest测试框架_管理测试用例生成测试报告
  11. 树莓派 python驱动蜂鸣器
  12. NLP 模型压缩方法综述
  13. PMP备考大全:经典题库(5月)
  14. HDFS集群管理与运维+distcp工具的使用
  15. 罗技数码的在线查询真伪
  16. NGUI的localize的更换KEY后刷新的问题
  17. log4j日志文件的使用及log4j日志文件失效原因分析
  18. 我们国家都有哪些信息安全标准
  19. 【原创】网页全站下载器4.0黑色版,利用爬虫获取所有js、css、img!
  20. Oracle——SQL基础练习

热门文章

  1. 实现一个 DFA 正则表达式引擎 - 4. DFA 的最小化
  2. Thinkphp小知识点
  3. 关于有源晶振倍频干扰的问题
  4. 浅析epoll – epoll函数深入讲解
  5. Ansible批量管理与维护
  6. tableau双折线图_Tableau可视化之多变条形图
  7. jq实现点事图片移动_新品速递 | 移动云图片文字识别类产品全新版本惊喜登场...
  8. 实例源码_SpringBoot数据库源码解析Template实例化操作
  9. 问题 F: 序列操作Ⅱ(前缀最大公约数,后缀最大公约数)
  10. 那个linux系统带有安装工具,linux系统程序安装(一)rpm工具