《Deep Learning Series》
  • 深耕系列之深度学习笔记
  • 第一章 Linux学习环境相关配置
    • 1.1 Ubuntu18下有道词典的配置
    • 1.2 Ubuntu18 安装Gitbook
    • 1.3 Ubuntu18 git命令使用总结
    • 1.4 Latex 排版使用笔记
    • 1.5 Ubuntu下常用工具软件配置安装
    • 1.6 win10+ubuntu双系统修复ubuntu启动引导
    • 1.7 gitbook 插件等相关设置
    • 1.8 深度学习环境搭建
    • 1.9 hexo 实现本地图片加载
    • 1.10 hexo网页定制
    • 1.11 sublime text3插件介绍
    • 1.12 vsftpd.conf文件配置
    • 1.13 mysql 笔记
    • 1.14 ubuntu16_18安装peek工具录制gif
    • 1.15 ubuntu下goldendict有道爬虫小程序
    • 1.16 ubuntu18升级后部分应用不能中文输入的问题
    • 1.17 ubuntu下安装有道词典
    • 1.18 opencv 安装
    • 1.19 gym_gazabe安装配置
    • 1.20 docker 基础
    • 1.21 docker_配置权限问题
    • 1.22 jupyternotebook使用
  • 第二章 深度学习相关基础算法
    • 2.1 马尔科夫链
      • 2.1.1 马尔科夫简单模型预测实战笔记
      • 2.1.2 最大熵模型
      • 2.1.3 隐马尔科夫HMM
    • 2.2 矩阵相关基础知识
    • 2.3 线性回归
    • 2.4 决策树
    • 2.5 梯度下降和最小二乘法
    • 2.6 递归算法与迭代算法
    • 2.7 神经网络浅学笔记
    • 2.8 强化学习经验回放
    • 2.9 K近邻算法
    • 2.10 朴素贝叶斯法
    • 2.11 极大似然估计
    • 2.12 logistic regression
  • 第三章 深度学习框架学习
    • 3.1 PyTorch 学习
      • 3.1.2 Pytorch 之MNIST手写字识别分类
    • 3.2 tensorflow学习笔记
      • 3.2.1 tensorflow之MNIST
    • 3.3 matplotlib函数
    • 3.4 numpy函数
  • 第四章 ROS机器人
    • ROS室内仿真环境.md
    • ros and gazebo and gym_gazebo安装
    • ubuntu16 安装gym-gazebo
    • gym-gazebo安装后的测试
    • 基于DQN的gym_gazebo运行代码演示
  • 项目开发
    • Library占座小工具使用手册
  • 附录
    • Python 相关笔记
      • Python 帮助文档检索方法
      • Module篇使用future
    • Git 相关配置
      • git-推送新的文章到github其他分支上
      • gitignre 配置
      • gitignre 配置
      • Hexo 每次写好后deploy博客
      • MFC Socket 通信
      • python之tkinter入坑Pack
      • ubuntu 中安装sublime_text3
      • ubuntu18-正确-安装ShadowSocket
      • vultr+freenom实现主机域名的绑定.md
      • 值得收藏的网站
      • 搜索技巧
      • 第一篇博文
      • 简单的方法,越过付费获取在线的log设计.md
      • 网页设计基础笔记.md
      • 解决Chrome67版本以后不能离线安装插件的情况.md
    • 嵌入式相关笔记
      • STM32串口通信配置
      • STM32复位及通过函数判断是何种条件出发的复位
Powered by GitBook
On this page
  • Socket 套接字的概念
  • Socket 函数功能
  • socket() 函数
  • bind() 函数
  • connect()函数
  • listen()函数
  • accept()函数
  • send()和recv()函数
  • sendto()和recvfrom()函数
  • close()和shutdown()函数
  • getpeername()函数
  • gethostname()函数
  • MFC 介绍
  • TCP 上位机实现

Was this helpful?

  1. 附录
  2. Git 相关配置

MFC Socket 通信

PreviousHexo 每次写好后deploy博客Nextpython之tkinter入坑Pack

Last updated 6 years ago

Was this helpful?

  • Socket 套接字的概念

  • Socket 函数功能

  • MFC 介绍

  • TCP 变成步骤

  • TCP 上位机实现

Socket 套接字的概念

引用:网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。

  • 一段形象的比喻:

建立网络通信连接至少要一对端口号(socket)。socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。

Socket的英文原义是“孔”或“插座”。在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。Socket正如其英文原义那样,像一个多孔插座。一台主机犹如布满各种插座的房间,每个插座有一个编号,有的插座提供220伏交流电, 有的提供110伏交流电,有的则提供有线电视节目。 客户软件将插头插到不同编号的插座,就可以得到不同的服务。

或者

Socket 函数功能

具体函数如下:

  • socket()函数

  • bind()函数

  • connect()函数

  • listen()函数

  • accept()函数

  • send()和recv()函数

  • sendto()和recvfrom()函数

  • close()和shutdown()函数

  • getpeername()函数

  • gethostname()函数

socket() 函数

int socket(int domine,int type,int protocol);
  • 参数(int domin):

函数参数,即协议域,又称为协议族。协议族决定了socket的地址类型,在通信中必须采用对应的地址,如AF_INET(IPV4)、AF_INET6(IPV6)、AF_LOCAL(或称AF_UNIX,Unix域socket)、AF_ROUTE等等。通常情况下我们使用AF_INET。

AF_INET的定义是:#define AF_INET 2,所以这里的参数都是int型的

  • 参数(int type):

:是套接口类型,主要SOCK_STREAM(建立TCP连接)、SOCK_DGRAM(建立UDP)、SOCK_RAW; SOCK_STREAM(建立TCP连接):提供面向连接的可靠的数据传输服务。数据被看作是字节流,无长度限制。例如FTP协议就采用这种。 SOCK_DGRAM(建立UDP):提供无连接的数据传输服务,不保证可靠性。

SOCK_RAW:该接口允许对较低层次协议,如IP,ICMP直接访问。

  • 参数(int protocole):

指定协议。常用的协议有,IPPROTO_TCP、IPPTOTO_UDP、IPPROTO_SCTP、IPPROTO_TIPC等,它们分别对应TCP传输协议、UDP传输协议、STCP传输协议、TIPC传输协议。通常情况系设为0。

注意:并不是上面的type和protocol可以随意组合的,如SOCK_STREAM不可以跟IPPROTO_UDP组合。当protocol为0时,会自动选择type类型对应的默认协议。

  • 函数返回值(int):

成功:返回套接字描述符(套接字的索引)

失败:返回-1

bind() 函数

一旦你有一个套接字,你可能要将套接字和机器上的一定的端口关联 起来。(如果你想用listen()来侦听一定端口的数据,这是必要一步--MUD 告 诉你说用命令 "telnet x.y.z 6969"。)如果你只想用 connect(),那么这个步 骤没有必要。但是无论如何,请继续读下去。

int bind(int sockfd, struct sockaddr *my_addr, int addrlen);
  • 参数(int sockfd):

sockfd 是调用 socket 返回的文件描述符。

  • 参数(struct sockaddr *my_addr):

my_addr 是指向数据结构 struct sockaddr 的指针,它保存你的地址(即端口和 IP 地址) 信息。

  • 参数(int addrlen):

addrlen 设置为 sizeof(struct sockaddr)。

connect()函数

现在我们假设你是个 telnet 程序。你的用户命令你得到套接字的文件 描述符。你听从命令调用了socket()。下一步,你的用户告诉你通过端口 23(标准 telnet 端口)连接到"132.241.5.10"。你该怎么做呢? 幸运的是,你正在阅读 connect()--如何连接到远程主机这一章。你可 不想让你的用户失望。

int connect(int sockfd, struct sockaddr *serv_addr, int addrlen);
  • 参数(int sockfd):

sockfd 是系统调用 socket() 返回的套接字文件描述符。

  • 参数(struct sockaddr *serv_addr):

serv_addr 是 保存着目的地端口和 IP 地址的数据结构 struct sockaddr。

  • 参数(int addrlen):

addrlen 设置 为 sizeof(struct sockaddr)。

listen()函数

是换换内容得时候了。假如你不希望与远程的一个地址相连,或者说, 仅仅是将它踢开,那你就需要等待接入请求并且用各种方法处理它们。处 理过程分两步:首先,你听--listen(),然后,你接受--accept() (请看下面的 内容)。

int listen(int sockfd, int backlog);
  • 参数(int sockfd):

sockfd 是调用 socket() 返回的套接字文件描述符。

  • 参数(int backlog):

backlog 是在进入 队列中允许的连接数目。

accept()函数

send()和recv()函数

sendto()和recvfrom()函数

close()和shutdown()函数

getpeername()函数

gethostname()函数

MFC 介绍

TCP 上位机实现

本节参考了

百度百科的一句话
SuperSocke,可扩展的 Socket 服务器框架
socket.io github 网页
官网
博文