套接字

基于TCP协议套接字,服务端实现接收客户端的连接并发

断了今生、忘了曾经 提交于 2019-12-02 00:11:37
基于TCP协议套接字,服务端实现接收客户端的连接并发 服务端 import socket from multiprocessing import Process server=socket.socket() server.setsockopt(SOL_SOCKET,SO_REUSEADDR,1) server.bind(('127.0.0.1',8080)) server.listen(5) def talk(conn,client_addr): while True: try: msg=conn.recv(1024) if not msg:break conn.send(msg.upper()) except Exception: break if __name__ == '__main__': # windows下start进程一定要写到这下面 while True: conn,client_addr=server.accept() p=Process(target=talk,args=(conn,client_addr)) p.start() 客户端 import socket client=socket.socket() client.connect(('127.0.0.1',8080)) while True: msg=input('>>: ').strip() if

linux 网络编程

帅比萌擦擦* 提交于 2019-12-01 21:49:14
int socket (int domain, int type, int protocol); 建立新的通信端口 int domain  网络层协议 可以填 AF_INET 表示IPv4 AF_INET6 表示IPv6 int type  传输类型 可以填 SOCK_STREAM 表示TCP SOCK_DGRAM 调试UDP int protocol  指定传输协议编号,这里填 0 返回值:成功→套接字文件描述符  失败→ -1 int serfd; serfd = socket(AF_INET,SOCK_STREAM,0); if(serfd == -1) { perror(“socket fail”); exit(-1); } int bind (int sockfd, const struct sockaddr *addr,socklen_t addrlen); 将服务器的地址信息与套接字进行绑定 int sockfd          套接字文件描述符 const struct sockaddr *addr  指向服务器地址信息的指针 struct sockaddr_in {   unsigned short int sin_family;  网络层协议对应的宏 AF_INET表示IPv4   uint16_t sin_port;        端口号   struct

CentOS 7 巨大变动之 systemd 取代 SysV的Init

别等时光非礼了梦想. 提交于 2019-12-01 20:55:18
1 systemd是什么 首先systmed是一个用户空间的程序,属于应用程序,不属于Linux内核范畴,Linux内核的主要特征在所有发行版中是统一的,厂商可以自由改变的是用户空间的应用程序。 Linux内核加载启动后,用户空间的第一个进程就是初始化进程,这个程序的物理文件约定位于/sbin/init,当然也可以通过传递内核参数来让内核启动指定的程序。这个进程的特点是进程号为1,代表第一个运行的用户空间进程。不同发行版采用了不同的启动程序,主要有以下几种主流选择: (1)以Ubuntu为代表的Linux发行版采用upstart。 (2)以7.0版本之前的CentOS为代表的System V init。 (3)CentOS7.0版本的systemd。 下面是CentOS6.5和CentOS7两个版本初始化进程的信息截图。 CentOS6.5采用的是systemV init CentOS7 采用的是systemd 2 Systemd物理文件组成 systemd是一个完整的软件包,安装完成后有很多物理文件组成,大致分布为,配置文件位于/etc/systemd这个目录下,配置工具命令位于/bin,和/sbin这两个目录下,预先准备的备用配置文件位于/lib/systemd目录下,还有库文件和帮助手册等等。这是一个庞大的软件包。详情使用rpm -ql systemd即可查看。

mongodb图片上传 初识vue

和自甴很熟 提交于 2019-12-01 20:13:44
1、回顾 1.1 node node 服务器 url querystring express express 项目生成器 ejs 1.2 mongodb mongod --dbpath d:\data\db mongo db.users.insert({}) db.users.insert([{},{}]) db.users.insertOne({}) db.users.insertMany([{},{}]) db.users.deleteOne({}) db.users.deleteMany({}) db.users.updateOne({}, {$set: {}}) db.users.updateMany({}, {$set: {}}) db.users.updateOne({}, {$inc: {}}) db.users.updateMany({}, {$inc: {}}) db.users.find() db.users.find({}) db.users.find({}, {}) db.users.find({}, {}).sort({}) db.users.find({}, {}).count() db.users.find({}, {}).skip().limit() db.users.find({}, {}).toArray() 1.3 封装 mongodb

详解TCP三次握手与四次挥手

喜你入骨 提交于 2019-12-01 19:36:14
一、TCP三次握手和socket详解 1.TCP 连接 第一次:cli发送SYN包(SYN = j)到ser,并且进入SYN_SEND状态,等待服务器确认; 第二次:ser收到SYN包,必须确认客户的SYN(ACK = j+1),同事自己也发送一个SYN包(SYN = k),即SYN+ACK,此时ser进入SYN_RECV状态; 第三次:cli收到ser的SYN+ACK包,向ser发送确认包ACK(ACK = k+1),此包发送完毕,ser和cli进入ESTABLISHED状态,完成三次握手。 握手过程中传送的包里不包含数据,三次握手完毕之后,cli与ser才开始传送数据。 2.三次握手状态详解: 3.图解三次握手: 从图中可以看出,当客户端调用connect时,触发了连接请求,向服务器发送了SYN包,这时connect进入阻塞状态;服务器监听到连接请求,即收到了SYN J包,调用accept函数接收请求 向客户端发送SYN K,ACK J+1,这时accept进入阻塞状态;客户端收到服务器的SYN K,ACK J+1之后,这时connect返回,并且对SYN K进行确认;服务器收到ACK K+1,accept返回,至此三次握手完毕,连接建立。 客户端的connect在三次握手的第二次返回,而服务器端的accept在三次握手的第三次返回 。 套接字之间的连接过程分为三个步骤

python基础之socket与socketserver

。_饼干妹妹 提交于 2019-12-01 19:35:58
---引入 Socket的英文原义是“孔”或“插座”,在Unix的进程通信机制中又称为‘套接字’。套接字实际上并不复杂,它是由一个ip地址以及一个端口号组成。Socket正如其英文原意那样,像一个多孔插座。一台主机犹如布满各种插座(ip地址)的房间,每个插座有很多插口(端口),通过这些插口接入电线(进程)我们可以烧水,看电视,玩电脑…… 应用程序通常通过"套接字"向网络发出请求或者应答网络请求 。 套接字的作用之一就是用来区分不同应用进程,当某个进程绑定了本机ip的某个端口,那么所有传送至这个ip地址上的这个端口的所有数据都会被内核送至该进程进行处理。 ---python中的socket Python 提供了两个基本的 socket 模块。 第一个是 Socket,它提供了标准的 BSD Sockets API。 第二个是 SocketServer, 它提供了服务器中心类,可以简化网络服务器的开发。 ----socket 先来说第一个。 我们知道,现在的应用程序大多为C/S架构,也就是分为客户端/服务器端。   服务器端:服务器端进程需要申请套接字,然后自己绑定在这个套接字上,并对这个套接字进行监听。当有客户端发送数据了,则接受数据进行处理,处理完成后对客户端进行响应。   客户端:客户端则相对简单些,客户端只需要申请一个套接字,然后通过这个套接字连接服务器端的套接字

通俗大白话来理解TCP协议的三次握手和四次分手

谁说胖子不能爱 提交于 2019-12-01 18:52:05
为什么80%的码农都做不了架构师?>>> 通俗大白话来理解TCP协议的三次握手和四次分手 #14 jawil commented on 25 Apr • edited 最近在恶补计算机网络方面的知识,之前对于TCP的三次握手和四次分手也是模模糊糊,对于其中的细节更是浑然不知,最近看了很多这方面的知识,也在系统的学习计算机网络,加深自己的CS功底,就把看过的一些比较好的东西和自己的一些理解二次加工组织一下然后交流分享,一起学习进步,对了这个面试好像经常问到。 原文收录在我的 GitHub博客 ( https://github.com/jawil/blog ) ,喜欢的可以关注最新动态,大家一起多交流学习,共同进步,以学习者的身份写博客,记录点滴。 通俗理解: 但是为什么一定要进行三次握手来保证连接是双工的呢,一次不行么?两次不行么?我们举一个现实生活中两个人进行语言沟通的例子来模拟三次握手。 引用网上的一些通俗易懂的例子,虽然不太正确,后面会指出,但是不妨碍我们理解,大体就是这么个理解法。 第一次对话: 老婆让甲出去打酱油,半路碰到一个朋友乙,甲问了一句:哥们你吃饭了么? 结果乙带着耳机听歌呢,根本没听到,没反应。甲心里想:跟你说话也没个音,不跟你说了,沟通失败。说明乙接受不到甲传过来的信息的情况下沟通肯定是失败的。 如果乙听到了甲说的话,那么第一次对话成功,接下来进行第二次对话。

你也可以写个服务器 - C# Socket学习2

冷暖自知 提交于 2019-12-01 18:26:56
阅读目录 前言 Socket模拟浏览器的Url Get请求 用Socket实现Web服务器 为什么不见三次握手 结束 续上篇 《你也可以写个聊天程序 - C# Socket学习1》 前言 这里说的服务器是Web服务器,是类似IIS、Tomcat之类的,用来响应浏览器请求的服务。 Socket模拟浏览器的Url Get请求 首先浏览器的请求是HTTP协议。我们上一篇说过,HTTP是短连接,用完就断开,是无状态的。所以我们在等待响应的时候不需要另外开个线程循环等待。 也就是我们只需要通过Socket和服务器建立连接,然后发送请求,然后接收服务器的响应,这样就完成了一次请求。 可是,我们一般访问网页的时候都是通过域名,没有IP也没有端口,怎么和服务器建立连接了。这里就需要用到我们上篇介绍的几个类了: //根据DNS获取域名绑定的IP foreach (var address in Dns.GetHostEntry("www.baidu.com").AddressList) { Console.WriteLine($"百度IP:{address}"); } //字符串转IP地址 IPAddress ipAddress = IPAddress.Parse("192.168.1.101"); //通过IP和端口构造IPEndPoint对象,用于远程连接 //通过IP可以确定一台电脑

网络编程(windows socket编程)

只愿长相守 提交于 2019-12-01 17:09:10
TCP服务器端代码: 1 // TcpSrv.cpp: 定义控制台应用程序的入口点。 2 // 3 4 #include "stdafx.h" 5 #include<Windows.h> 6 #pragma comment(lib,"ws2_32.lib") 7 8 int main() 9 { 10 //************加载套接字库***************** 11 WORD wVersionRequested; 12 WSADATA wsaData; 13 int err; 14 15 wVersionRequested = MAKEWORD(2,2);//Winsock库版本,低字节代表主版本,高字节代表副版本 16 err = WSAStartup(wVersionRequested, &wsaData); 17 if (err != 0) 18 { 19 return false; 20 } 21 if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2) 22 { 23 WSACleanup();//终止对winsock库的使用 24 return false; 25 } 26 27 //***********创建套接字******************** 28 29 /

套接字编程

守給你的承諾、 提交于 2019-12-01 16:40:56
目录 1.软件架构 2.网络编程 3.socket编程 1.软件架构 c/s架构 client客户端 server服务端 优点:软件的使用稳定,可以节省网络资源 缺点:若用户想在同一个设备上使用多个软件,必须下载多个客户端。软件的每一次更新,客户端也必须跟着更新 c/s架构的软件 QQ,Pycharm b/s架构 browser:浏览器 server:服务器 优点:以浏览器充当客户端,无需用户下载多个软件,也无需用户下载更新软件版本。用户以浏览器充当客户端,直接在浏览器访问需要使用的软件。 缺点:消耗网络资源过大,当网络不稳定的时候,网络的使用也不稳定。 2.网络编程 实现远程通信必须具备: 物理连接介质:网卡 互联网协议 计算机之间沟通的介质:互联网协议 互联网协议: 互联网协议又称为网络七层协议,OSI七层协议,OSI是一个世界标准组织 物理连接层 基于电信号发送二级制的数据01001001001010010 数据链路层 数据链路层的以太网协议,专门用于处理基于电信号的二级制数据 以太网协议: 规定好电信号的数据分组方式 每一台连接网线的电脑必须要有一块网卡 网卡由不同的厂商生成的 每块网卡都会有世界上独一无二的12位编号 前6位:厂商号 后6位:流水号 交换机:可以让多台电脑连接到一起。 基于以太网协议发送数据 特点: ​ 广播,单播 弊端: ​ 广播风暴,不能跨局域网通信