74)搭建TCP服务器
补充:
1-->listen是监听,就是监听你建立的那个socket那个窗口,要是有客户端来了,那么就把他加到 队列里面,然后accept是从队列中取客户端(就是把对应的客人的信息拿过来,交给waiter,它是accept的返回值)
2-->要是我在监听函数listen后面加上while(1),那么 客户端能够连接上我的服务器吗?====> 答案是能。因为监听是 等客户端来连接,他把客人都放到自己的队列里,而accept是从队列中把客人的信息取出来交给waiter
我们虽然没有取客人的过程,但是客人是能接到,只不过接下来服务器和客户端的沟通处理不了了
但是我将我的listen(,最大监听数量n) 这个最大监听数量改成1,那么只能有一个客户端能连上服务器,这个n就是服务器能同时连接的最多客户端数量
3-->listen是往队列中放,accept是从队列中往外取
4-->那么在listen和accept之间发生了什么?
TCP连接过程称为 三次握手-->
三次握手成功之后,这两个才能通信
5-->TCP协议头:
窗口尺寸是因为 TCP有 流量机制
~~~~~~~~~~~~~~~~~~~~~~~~·
TCP那个图,有一个生存周期(8),这个参数 规定,没经过一个路由器 这个参数就减一
5--->链路层最少需要18个字节,帧头14个字节,帧尾4个字节
6--->滑动窗口:
7--->TCP断开连接,就是分手过程-->就是四次挥手
8-->
基本步骤和搭建UDP服务器步骤一样:
基本步骤:
- 我们假设成 我们卖东西
- 第一步加载库
- 第二步 找个店长卖东西 --->创建socket
- 第三步 找个店地 -->绑定bind
- 第四步 店长去店门口看 去宣传 有没有人来 --->监听listen
- 第五步 人来了 接客 ,交给服务员 --->accept
- 第六步 服务员和这个顾客进行对话-->send 和recv
第七步 然后就是 关闭套接字
第八步 卸载库
然后 我们基本的代码;
- //其实步骤和UDP差不多
- #include<iostream>
- #include<Winsock2.h>
- using namespace std;
- #pragma comment(lib, "ws2_32.lib")
- int main()
- {
- //第一步
- WORD wVersionRequested;
- WSADATA wsaData;
- int err;
- wVersionRequested = MAKEWORD(, );
- err = WSAStartup(wVersionRequested, &wsaData);
- if (err != ) {
- printf("WSAStartup failed with error: %d\n", err);
- return ;
- }
- if (LOBYTE(wsaData.wVersion) != || HIBYTE(wsaData.wVersion) != ) {
- printf("Could not find a usable version of Winsock.dll\n");
- WSACleanup();
- return ;
- }
- else
- printf("The Winsock 2.2 dll was found okay\n");
- //第二步:
- SOCKET sock=socket(AF_INET ,SOCK_STREAM,IPPROTO_TCP );
- if(sock==INVALID_SOCKET)
- {
- WSACleanup();
- return ;
- }
- //第三步
- sockaddr_in server_addr;
- server_addr.sin_family=AF_INET;
- server_addr.sin_port=htons();
- server_addr.sin_addr.S_un.S_addr=inet_addr("192.168.3.221");
- //第四步
- if(bind(sock,(const sockaddr*)&server_addr,sizeof(server_addr))==SOCKET_ERROR)
- {
- closesocket(sock);
- WSACleanup();
- return ;
- }
- //第五步
- if(SOCKET_ERROR ==listen(sock,))
- {
- closesocket(sock);
- WSACleanup();
- return ;
- }
- //第六步
- sockaddr_in rec_addr;
- SOCKET sock_waiter;
- int size=sizeof(rec_addr);
- sock_waiter=accept(sock,(sockaddr*)&rec_addr,&size);
- if(sock_waiter==INVALID_SOCKET)
- {
- closesocket(sock);
- WSACleanup();
- return ;
- }
- //第七步
- char rec_buffer[]={};
- if(recv(sock_waiter,rec_buffer,sizeof(rec_buffer),)>)
- {
- cout<<rec_buffer<<endl;
- cin>>rec_buffer;
- send(sock_waiter,rec_buffer,sizeof(rec_buffer),);
- }
- //第八步
- closesocket(sock);
- closesocket(sock_waiter);
- WSACleanup();
- return ;
- system("pause");
- return ;
- }
具体不懂的看手册
然后 这里还有一饿客户端的代码:
- #include<iostream>
- #include<Winsock2.h>
- using namespace std;
- #pragma comment(lib, "ws2_32.lib")
- int main()
- {
- //第一步
- WORD wVersionRequested;
- WSADATA wsaData;
- int err;
- wVersionRequested = MAKEWORD(, );
- err = WSAStartup(wVersionRequested, &wsaData);
- if (err != ) {
- printf("WSAStartup failed with error: %d\n", err);
- return ;
- }
- if (LOBYTE(wsaData.wVersion) != || HIBYTE(wsaData.wVersion) != ) {
- printf("Could not find a usable version of Winsock.dll\n");
- WSACleanup();
- return ;
- }
- else
- printf("The Winsock 2.2 dll was found okay\n");
- //第二步:
- SOCKET sock=socket(AF_INET ,SOCK_STREAM,IPPROTO_TCP );
- if(sock==INVALID_SOCKET)
- {
- WSACleanup();
- return ;
- }
- //第三步
- sockaddr_in clientService;
- clientService.sin_family = AF_INET;
- clientService.sin_addr.s_addr = inet_addr("192.168.3.153");
- clientService.sin_port = htons();
- connect(sock,(SOCKADDR *) & clientService, sizeof (clientService));
- //第七步
- char rec_buffer[]={};
- cin>>rec_buffer;
- send(sock,rec_buffer,sizeof(rec_buffer),);
- recv(sock,rec_buffer,sizeof(rec_buffer),);
- cout<<rec_buffer<<endl;
- //第八步
- closesocket(sock);
- WSACleanup();
- return ;
- system("pause");
- return ;
- }
74)搭建TCP服务器的更多相关文章
- netty搭建Tcp服务器实践
在netty基本组件介绍中,我们大致了解了netty的一些基本组件,今天我们来搭建一个基于netty的Tcp服务端程序,通过代码来了解和熟悉这些组件的功能和使用方法. 首先我们自己创建一个Server ...
- netty系列之:来,手把手教你使用netty搭建一个DNS tcp服务器
目录 简介 搭建netty服务器 DNS服务器的消息处理 DNS客户端消息请求 总结 简介 在前面的文章中,我们提到了使用netty构建tcp和udp的客户端向已经公布的DNS服务器进行域名请求服务. ...
- RedHat6.2搭建FTP服务器
我的环境: A:Red Hat Enterprise 6.2 IP:192.168.16.12 此机作测试端 B:Red Hat Enterprise 6.2 IP:192.168.16.13 此机做 ...
- 如何用极路由+OpenWrt+SDR电视棒搭建SDR服务器
0×00 前言 近期因为有个从异地捕获无线信号的需求,便尝试着用OpenWrt+公网IP搭建了一台SDR服务器.如果有小伙伴嫌SDR硬件天线看起来太乱.或者电脑没有足够的USB接口也可在局域网搭建SD ...
- 自己家里搭建NAS服务器有什么好方案?
转自:https://www.zhihu.com/question/21359049 作者:陈二发链接:https://www.zhihu.com/question/21359049/answer/6 ...
- Windows Server 2003搭建邮件服务器
Windows Server 2003搭建邮件服务器 由于Windows Server 2003默认是没有安装我们搭建邮件服务器所需要的POP3和SMTP服务的,因此需要我们自己来安装.方法如下: 1 ...
- 绕过校园网的共享限制 win10搭建VPN服务器实现--从入门到放弃
一.开篇立论= =.. 上次说到博主在电脑上搭建了代理服务器来绕过天翼客户端的共享限制,然而经过实际测试还不够完美,所以本着生命不息,折腾不止的精神,我又开始研究搭建vpn服务器= =... (上次的 ...
- Mac上搭建直播服务器Nginx+rtmp
简介 nginx是非常优秀的开源服务器,用它来做hls或者rtmp流媒体服务器是非常不错的选择,本人在网上整理了安装流程,分享给大家并且作备忘. 步骤安装 1.安装Homebrow Homebrew简 ...
- 如何在windows上搭建ftp服务器
FTP(File Transfer Protocol)是TCP/IP网络上两台计算机传送文件的协议,使得主机间可以共享文件.目前有很多软件都能实现这一功能,然而windows自带的IIS就可以帮助你搭 ...
随机推荐
- Spark on Yarn | Spark,从入门到精通
?/ 为什么需要 Yarn? /? Yarn?的全称是?Yet Anther Resource Negotiator(另一种资源协商者).它作为 Hadoop?的一个组件,官方对它的定义是一个工作调度 ...
- PHPmyadmin Getshell(10.25 第二十七天)
PHPmyadmin Getshell的方法(1)show global variables like '% secure-file-priv%' 如果该参数设置为空或者指定的文件夹可以利用,然后写木 ...
- POJ3616:Milking Time
Milking Time Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5682 Accepted: 2372 Desc ...
- M3U8地址在谷歌浏览器中播放
该案例git码云地址:https://gitee.com/kawhileonardfans/hls-player-example 1.下载插件 插件地址:https://files.cnblogs.c ...
- 会话控制——Cookie和Session
Cookie简介 l HTTP是无状态协议,服务器不能记录浏览器的访问状态,也就是说服务器不能区分中两次请求是否由一个客户端发出.这样的设计严重阻碍的Web程序的设计.如:在我们进行网购时,买了一条 ...
- Vulkan 之 Synchronization
1.2之前定的版本采用 vkSemaphore和vkFence来进行同步, VkSemaphore allowed applications to synchronize operations acr ...
- 【问题管理】-- Tomcat8部署项目加载静态资源html页面编码错误
1.问题背景及解决方式 最近在回顾Tomcat部署Web项目,自己简单地从Tomcat的下载安装及配置server.xml文件入手,学习Tomcat的项目部署,在自己使用IDEA创建了一个简单地web ...
- Elasticsearch 过滤
章节 Elasticsearch 基本概念 Elasticsearch 安装 Elasticsearch 使用集群 Elasticsearch 健康检查 Elasticsearch 列出索引 Elas ...
- SpringMVC: JSON
SpringMVC:JSON讲解 什么是JSON? JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式,目前使用特别广泛. 采用完全独立于编 ...
- HDU - 2602 Bone Collector(01背包讲解)
题意:01背包:有N件物品和一个容量为V的背包.每种物品均只有一件.第i件物品的费用是volume[i],价值是value[i],求解将哪些物品装入背包可使价值总和最大. 分析: 1.构造二维数组: ...