目录

  • 一、学习的知识点
    • 基于socket服务器
      • socket函数
      • bind函数
      • listen函数
      • accept函数
  • 二、上课没有听懂或者没有理解的地方
  • 三、当天学习的收获

一、学习的知识点

  1. 每个上网的电脑都有唯一的IP地址
  2. 一个电脑的进程有唯一的端口号(应用层的),进程不跑就没有端口号。
  3. IP端口最多65536个,80端口是网页端口。
  4. IP分为外网IP和内网IP
  5. 网关是路由器的IP地址
  6. DNS域名解析 服务器,将域名如 baidu.com 解析成 点分十进制 的格式
  7. 实时通信,socket通信协议 套接字,还有http ftp ssh通信协议,都是基于TCP/IP或UDP协议栈
  8. TCP更可靠 有3次握手,实时性高
  9. UDP更快,不用握手,但不可靠,基于数据包,会丢失,视频或文件时

基于socket服务器

socket函数

  • 功能:创建一个套接字用于通信
  • 原型:int socket(int domain,int type,int protocol);
  • 参数:
    • domain: 指定通信协议族 如AF_INET IPV4协议
    • type: 指定socket类型,SOCK_STREAM 流式套接字,SOCK_DGRAM数据报套接字,SOCK_RAW 原始套接字
    • protocol: 协议类型 IPPRCTO_TCP 表示IP协议栈的TCP协议
  • 返回值:套接口描述字,与文件描述符类似,简称套接字。失败返回 -1

bind函数

  • 功能:绑定一个本地地址到套接字
  • 原型:int bind(int sockfd,const struct sockaddr *addr,socklen_t addrlen);
  • 参数:
    • sockfd: socket函数返回的套接字
    • addr: 要绑定的地址
    • addrlen: 地址长度
  • 返回值:成功返回0,失败返回 -1

listen函数

  • 功能:将套接字用于监听接入的连接
  • 原型:int listen(int sockfd,int backlog);
  • 参数:
    • sockfd: socket函数返回的套接字
    • backlog: 规定内核为此套接字排队的最大连接个数,完成三次握手的和未完成三次握手(只完成一次或两次)的数量不能超过 backlog。SOMAXCONN 128
  • 返回值:成功返回0,失败返回 -1

accept函数

连接成功后取走 listen 中完成三次握手的队列对应客户端的数据

  • 功能:从已完成连接队列返回第一个连接,若已完成连接队列为空,则阻塞
  • 原型:int accept(int sockfd,const struct sockaddr *addr,socklen_t addrlen);
  • 参数:
    • sockfd: 服务器套接字
    • addr: 将返回对等方的套接字地址
    • addrlen: 返回对等方的套接字地址长度
  • 返回值:成功返回客户端文件描述符,失败返回 -1
int main()
{//1. 创建一个套接字int socket_fd = socket(AF_INET, SOCK_STREAM, 0); //AF_INET ipv4  SOCK_STREAM流式套接字if (socket_fd == -1)ERR_EXIT("socket");//2. 绑定IP和端口struct sockaddr_in ser_add;ser_add.sin_family = AF_INET;ser_add.sin_port = htons(8091); //把8090端口号转换成网络字节序ser_add.sin_addr.s_addr = htonl(INADDR_ANY); //本机的测试ip 127.0.0.1 或本机真正ip //inet_aton("192.168.", &ser_add.sin_addr);或者真正ipint ret = bind(socket_fd, (struct sockaddr*)&ser_add, sizeof(ser_add));//绑定服务器的IPif (ret == -1)ERR_EXIT("bind");//setsockopt(socket_fd, SOL_SOCKET, SO_REUSEPORT, (char*)&ser_add, sizeof(ser_add)); 端口复用ret = listen(socket_fd, SOMAXCONN);//3. 监听的时候,设置已经完成三次握手的客户端的个数的最大值if (ret == -1)ERR_EXIT("listen");struct sockaddr_in cli_add; //客户端结构体socklen_t add_len = sizeof(cli_add);//4. 如果没有客户端完成三次握手,程序会阻塞在acceptcout << "wait" << endl;int con_fd=accept(socket_fd, (struct sockaddr*)&cli_add, &add_len); //接收 成功返回用于通信的fdif (con_fd == -1)ERR_EXIT("accept");cout << "someone on line..." << endl;char buf[64] = { 0 };read(con_fd,buf,64);cout << buf << endl;//nc 127.0.0.1 8091/*客户端int ret=0;int sockfd=socket(AF_INET,SOCK_STREAM,0)struct sockaddr_in addr;addr.sinfamily=AF_INET;addr.sin_port=htons(8090);inet_aton("192.168.254.132",addr.sin_addr);ret=connect(sockfd,(struct sockaddr*)&addr,sizeof(addr));if(ret!=0){}cout << "connect success" << endl;read(sockfd,"hello omo",64);*/return 0;
}

二、上课没有听懂或者没有理解的地方

三、当天学习的收获

进程间通信-共享内存、socket服务器

210130阶段三socket服务器相关推荐

  1. java socket oc_Java Socket编程(三) 服务器Sockets

    文章来源:aspcn 作者:孙雯 服务器Sockets 列表9.2是一个服务器应用程序的一部分. 列表9.2 一个简单的服务器程序 /** * 一个监听端口并提供HTML文档的程序. */ class ...

  2. [转|整理]翻译:使用.net3.5的缓存池和SocketAsyncEventArgs类创建socket服务器

    原文地址:http://www.cnblogs.com/onlytiancai/archive/2008/06/25/1229321.html http://www.cnblogs.com/killk ...

  3. php运行socket服务器,PHP_php简单socket服务器客户端代码实例,本篇文章分享一个简单的socket - phpStudy...

    php简单socket服务器客户端代码实例 本篇文章分享一个简单的socket示例,用php.实现一个接收输入字符串,处理并返回这个字符串到客户端的TCP服务. 产生一个 socket 服务端 /*文 ...

  4. ActionScript接收socket服务器发送来的数据

    原文地址:http://www.asp119.com/news/2009522181815_1.htm 从socket中接收数据的方法取决于你使用socket类型,Socket和XMLSocket都可 ...

  5. php后端如何搭建socket服务,从php做一个简单的socket服务器流程

    socket的中文名字称为套接字,这类物品就是说对TCP/iP的"封裝".实际中的互联网事实上只能四层罢了,从上至下分別是网络层.传输层.网络层.统计数据链路层.最常见的.com协 ...

  6. 以C#编写的Socket服务器的Android手机聊天室Demo

      内容摘要 1.程序架构    2.通信协议    3.服务器源代码    4.客户端源代码    5.运行效果 一.程序架构 在开发一个聊天室程序时,我们可以使用Socket.Remoting.W ...

  7. python tornado websocket_Python Tornado实现WEB服务器Socket服务器共存并实现交互的方法...

    1.背景 最近有个项目,需要搭建一个socket服务器,一个web服务器,然后实现两个服务器之间的通讯交互.刚开始的方案是用Python中socket模块实现一个多线程的socket服务器,然后用Fl ...

  8. php 连接socket服务器_PHP-Socket服务端客户端发送接收通信实例详解

    Socket介绍 什么是socket 所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过"套接字"向网络发出请求 ...

  9. Shell脚本学习-阶段三

    文章目录-Shell学习阶段三 前言 1.用shell脚本批量建立Linux用户 2. 编写shell脚本,将/usr/local/test目录下大于100k的文件转移到/tmp目录下: 3.通过ap ...

最新文章

  1. Redis 教程基于win10:1介绍
  2. servlet action is not available
  3. centos MySQL 双机_CentOS利用Keepalived构建双主MySQL+双机热备
  4. 如何用C#检查硬盘是否是固态硬盘SSD
  5. 学院-读书:影响世界的100本书
  6. 适合python爬虫使用的浏览器_python爬虫:使用Selenium模拟浏览器
  7. flink中写入行存储、列存储时设定checkpoint多久时间间隔另存一个新文件
  8. 【】MTCNN基于NCNN的测试过程
  9. 【C语言进阶深度学习记录】二十三 数组的本质分析
  10. 计算机的指令合成为,第二章计算机操作基础知识doc
  11. linux 2.6内核进程调度,Linux2.6内核进程调度系列--scheduler_tick()函数2.更新实时进程的时间片,...
  12. 将多个markdown文件发布为一个html或pdf文件的方法梳理
  13. 13 MySQL--存储过程
  14. 在centos7上使用yum安装jdk1.8
  15. java案例代码4-数组的复制
  16. 2017cad光标大小怎么调_关于调整input里面的输入光标大小
  17. 电脑九大常用的网络命令 ,很实用!
  18. 软考|高级信息系统项目管理师
  19. Windows部署KMS服务器
  20. VSCode安装插件,使用本地下载vsix文件

热门文章

  1. 洛谷P1090 合并果子
  2. 运营一个网站,新增加一个功能,容易忽视哪些问题就匆匆上线?
  3. 关于PID的如何修改的FAQ
  4. React Native的安装和初始化(android /ios)
  5. Python之ORM
  6. 初谈Git(本机克隆项目远程仓库)
  7. JavaScript 中回调地狱的今生前世
  8. pyMagic:用python控制的Geek入门神器
  9. Linux01-Linux文本编辑器vim编辑器深入详解22
  10. ASP.Net缓存 1