文章目录

  • 一、socket通信的概念
  • 二、套接字(socket)
  • 三、socket通信的过程
  • 在这里插入图片描述 四、客户/服务端模式
    • 服务端的工作流程
    • 2、客户端的工作流程
  • 在这里插入图片描述 五、注意事项
    • 1、别去纠缠细节
    • 2、服务端程序绑定地址
    • 3、服务端程序绑定的通信端口
    • 4、客户端程序指定服务端的ip地址
    • 5、客户端程序指定服务端的通信端口
    • 6、send函数
    • 7、recv函数
    • 8、服务端有两个socket
    • 9、程序退出时先关闭socket
  • 六、相关的库函数
    • 1、socket函数
    • 2、gethostbyname函数
    • 3、connect函数
    • 4、bind函数
    • 5、listen函数
    • 6、accept函数
    • 7、函数小结
  • 七、课后作业
  • 八、版权声明

各位兄弟,在学习Linux编程基础之前,一定要先学习Linux基础知识和计算机网络基础知识,如果对这两方面的基础知识和基本概念不熟,谈不上Linux编程和网络通信编程。

一、socket通信的概念

socket也称作“套接字”,描述了计算机的IP地址和端口,运行在计算机中的程序之间采用socket进行数据通信。通信的两端都有socket,它是一个通道,数据在两个socket之间进行传输。

socket把复杂的TCP/IP协议族隐藏在socket接口后面,对程序员来说,只要用好socket相关的函数,就可以完成数据通信。

二、套接字(socket)

TCP提供了流(stream)和数据报(datagram)两种通信机制,所以套接字也分为流套接字和数据报套接字。

流套接字的类型是SOCK_STREAM,它提供的是一个有序、可靠、双向字节流的连接,因此发送的数据可以确保不会丢失、重复或乱序到达,而且它还有出错后重新发送的机制(就像两个人在打电话,聊天您一句我一句,有来有往,没听清楚就再说一次)。

数据报套接的类型是SOCK_DGRAM,它不需要建立和维持一个连接,采用UDP/IP协议实现。它对可以发送的数据的长度有限制,数据报作为一个单独的网络消息被传输,它可能会丢失、复制或错乱到达,UDP不是一个可靠的协议,但是它的速度比较高,因为它不需要建立和维持连接(就像一个人向另一个人发短信,一条短信发出去,对方不一定能收到)。

在实际开发中,数据报套接字(即UDP)的应用场景极少,本章节只介绍流套接字。

三、socket通信的过程

1)服务端程序将一个套接字绑定到指定的ip地址和端口,并通过此套接字等待和监听客户的连接请求。

2)客户程序向服务端程序绑定的地址和端口发出连接请求。

3)服务端接受连接请求。

4)客户端和服务端通过读写套接字进行通信。


四、客户/服务端模式

在TCP/IP网络应用中,两个程序之间通信模式是客户/服务端模式(client/server),客户/服务端也叫作客户/服务器,各人习惯。

服务端的工作流程

1)创建服务端的socket。

2)把服务端用于通信的地址和端口绑定到socket上。

3)把socket设置为监听模式。

4)接受客户端的连接。

5)与客户端通信,接收客户端发过来的报文后,回复处理结果。

6)不断的重复第5)步,直到客户端断开连接。

7)关闭socket,释放资源。

服务端示例(book242.cpp)

/** 程序名:book242.cpp,此程序用于演示socket通信的服务端* 作者:C语言技术网(www.freecplus.net) 日期:20190525
*/
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <netdb.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>


http://www.taodudu.cc/news/show-620643.html

相关文章:

  • 学习笔记:linuxsocket通信基础
  • 学习笔记:二叉搜索树的验证
  • 学习笔记:验证对称二叉树
  • 转载:如何将一个新函数加到MATLAB函数库中
  • 转载:VMware Workstation 无法连接到虚拟机。
  • 大一阶段性总结
  • windows下的文本文件在linux下查看,中文显示乱码
  • make警告:检测到时钟错误。您的创建可能是不完整的
  • 《实用》secureCRT远程连接linux虚拟机-突然连接不上-解决办法
  • 关于文件描述符的问题的解决
  • 库函数设计:关于文件类打开操作函数不自动创建不存在的父目录问题
  • 忽略所有信号导致的程序Ctrl+c和Ctrl+z无法退出问题,以及信号表详解
  • qxidc项目/crtsurfdata程序 杀青总结
  • 映射递归循环-约瑟夫环问题递归解法的一点理解
  • 转载:二叉树的前中后和层序遍历详细图解(递归和非递归写法)
  • 新建虚拟机update时出现不能得到锁问题
  • 新建虚拟机Ubuntu16.4安装搜狗输入法的问题
  • ubuntu安装搜狗输入法-全面版
  • centos7花里胡哨之终端美化
  • centos主题设置
  • Linux CentOS7 中 完美解决VMTools失效,windows 与 Liunx间完美复制文件,无报错的解决方案
  • CentOS下C++开发环境搭建
  • linux终端设置-集成说明
  • 2016a迈特莱布
  • c++从零实现神经网络
  • Swap交换分区概念
  • linux 创建/删除 swap交换分区
  • centos查看网关地址
  • 修改某个用户名和密码
  • centos7修改系统语言为简体中文

转载:socket通信基础相关推荐

  1. socket通信基础

    文章目录 一.socket通信的概念 二.套接字(socket) 三.socket通信的过程 在这里插入图片描述 四.客户/服务端模式 服务端的工作流程 2.客户端的工作流程 在这里插入图片描述 五. ...

  2. socket通信基础知识

    socket的概念 socket用于网络中一台计算机中的程序与其他计算机的程序之间需要交换数据. socket也称作"套接字",用于描述IP地址和端口,是一个通信链路的描述符.应用 ...

  3. 转载 Socket与TCP/IP的关系 转(非常好的一篇文章!)

    要写网络程序就必须用 Socket ,这是程序员都知道的.而且,面试的时候,我们也会问对方会不会 Socket 编程?一般来说,很多人都会说, Socket 编程基本就是 listen , accep ...

  4. #转载:杨辉三角形实现过程详解-c语言基础

    杨辉三角形实现过程详解-C语言基础 十一一个人 2018-12-26 06:45:45 6465 收藏 28 最后发布:2018-12-26 06:45:45首发:2018-12-26 06:45:4 ...

  5. 转载:【opencv入门教程之六】创建Trackbar图片对比度、亮度值调整

    [OpenCV入门教程之六] 创建Trackbar & 图像对比度.亮度值调整 浅墨_毛星云 2014-03-18 21:43:18 103746 收藏 21 最后发布:2014-03-18 ...

  6. 转载:掩膜矩阵操作数学解释(权重表,锐化)

    矩阵掩模操作 baidu_19069751 2016-03-13 01:29:27 2475 收藏 最后发布:2016-03-13 01:29:27首发:2016-03-13 01:29:27 分类专 ...

  7. 转载:矩阵的掩膜操作实现图像对比度调整

    矩阵的掩膜操作实现图像对比度调整 hb707934728 2017-07-04 13:54:17 1170 收藏 最后发布:2017-07-04 13:54:17首发:2017-07-04 13:54 ...

  8. 转载:opencv:关于vs opencv每次都要配置的解决方案

    关于vs2015每次打开都要配置opencv问题 qwezhaohaihong 2017-03-26 20:14:18 3031 收藏 1 最后发布:2017-03-26 20:14:18首发:201 ...

  9. 转载:opencv错误rect错误

    Opencv学习笔记(图片融合.图片显示.图片存储) makcooo 2019-03-14 21:49:29 66 收藏 最后发布:2019-03-14 21:49:29首发:2019-03-14 2 ...

最新文章

  1. jvm from space 很小_JVM真香系列:堆内存详解
  2. 英特尔首推物联网云平台设备管理
  3. rm命令改为移动到回收站
  4. matlab练习程序(PCASVD)
  5. 计算机windows无响应,Windows电脑便笺没反应不能用了怎么办?
  6. 智能仪器原理及设计C语言,智能仪器仪表课程设计.doc
  7. 神奇的 37% 的概率
  8. Linux:VMware12.5.7安装Ubuntu16.04.2失败的解决方案cpufreq: cpufreq_online: Failed to initialize policy for cpu
  9. 计算平均指令时间_欧姆龙PLC指令应用案例(问答解析)
  10. 首都师范 博弈论 5 3 1合作博弈与数学表达
  11. 联想笔记本电脑(LENOVO)关闭触摸板
  12. C 语言中结构体中成员所占内存的大小
  13. 从fastq生成vcf文件
  14. 一位16年老员工的反思:什么才是真正的执行力?
  15. 提高php代码质量 36计
  16. Pyecharts--第一个培训数据dashboard(不太完美)
  17. Visual Haze Removal by a Unified GenerativeAdversarial Network(基于生成式对抗网络的图像去雾IEEE2019)
  18. Centos7 安装指定版本Gitlab
  19. 滴水逆向三期实践10:动态链接库
  20. 联想台式计算机内存哪个好,联想台式机哪款好 联想台式机家悦3000评测【详解】...

热门文章

  1. hdu5446(2015长春网络赛J题)
  2. JZOJ__Day 5:【普及模拟】num
  3. rhel6上使用udev配置oracle asm,Red Hat Enterprise Linux 6使用udev配置Oracle ASM总结文档
  4. 归并排序执行次数_肯定能懂的常见算法讲解(1)——排序算法
  5. 二进制、字节、int范围、编码
  6. # 起床困难综合症(二进制枚举+按位求贡献)
  7. MySQL分库分表 mycat
  8. 那些年,我们追过的java8
  9. 1250 Fibonacci数列(矩阵乘法快速幂)
  10. grid布局合并单元格