套接字

Python-网络编程

半城伤御伤魂 提交于 2019-12-23 03:17:17
客户端/服务器架构 服务端提供服务 客户端请求服务 套接字:通信端点 套接字是计算机网络数据结构,它体现了“通信端点”的概念。 在任何类型的通信开始之前,网络应用程序必须创建套接字。 可以将它们比作电话插孔,没有它将无法进行通信。 Python 中的网络编程 socket()模块函数 要创建套接字,必须使用 socket.socket()函数,它一般的语法如下。 socket(socket_family, socket_type, protocol=0) socket_family 是 AF_UNIX 或 AF_INET socket_type 是 SOCK_STREAM或 SOCK_DGRAM protocol 通常省略,默认为 0 使用以下方式创建TCP/UDP套接字 from socket import *​TCPSock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)​UDPSpck=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) 套接字对象(内置)方法 常见的套接字对象方法和属性 名 称 描 述 服务器套接字方法 s.bind() 将地址(主机名、端口号对)绑定到套接字上 s.listen() 设置并启动 TCP 监听器 s.accept() 被动接受 TCP 客户端连接

Windows Socket 网络编程(二) —— 套接字编程原理[转自VC知识库]

只愿长相守 提交于 2019-12-23 02:16:19
一、客户机/服务器模式 在TCP/IP网络中两个进程间的相互作用的主机模式是客户机/服务器模式(Client/Server model)。该模式的建立基于以下两点:1、非对等作用;2、通信完全是异步的。客户机/服务器模式在操作过程中采取的是主动请示方式: 首先服务器方要先启动,并根据请示提供相应服务:(过程如下) 1、打开一通信通道并告知本地主机,它愿意在某一个公认地址上接收客户请求。 2、等待客户请求到达该端口。 3、接收到重复服务请求,处理该请求并发送应答信号。 4、返回第二步,等待另一客户请求 5、关闭服务器。 客户方: 1、打开一通信通道,并连接到服务器所在主机的特定端口。 2、向服务器发送服务请求报文,等待并接收应答;继续提出请求…… 3、请求结束后关闭通信通道并终止。 二、基本套接字 为了更好说明套接字编程原理,给出几个基本的套接字,在以后的篇幅中会给出更详细的使用说明。 1、创建套接字——socket() 功能:使用前创建一个新的套接字 格式:SOCKET PASCAL FAR socket(int af,int type,int procotol); 参数:af: 通信发生的区域 type: 要建立的套接字类型 procotol: 使用的特定协议 2、指定本地地址——bind() 功能:将套接字地址与所创建的套接字号联系起来。 格式:int PASCAL FAR

Python中的udp网络传输基础代码

こ雲淡風輕ζ 提交于 2019-12-22 14:15:46
与tcp相对应的另一种网络传输: 客户端代码: """ udp_client.py udp客户端流程 """ from socket import * # 服务端地址 ADDR = ( '127.0.0.1' , 8888 ) # 创建udp套接字 sockfd = socket ( AF_INET , SOCK_DGRAM ) # 循环发送消息 while True : data = input ( "Msg>>" ) if not data : # 遇到输入为空就结束循环 break # 向服务器发送 sockfd . sendto ( data . encode ( ) , ADDR ) # 没有connect,而是在sendto时,使用ADDR msg , addr = sockfd . recvfrom ( 1024 ) # 接收消息,记得写上消息缓冲区大小 print ( "From Server:" , msg . decode ( ) ) # 打印时记得转换成字符串 sockfd . close ( ) # 关闭套接字 服务端代码: """ udp_server.py udp服务端流程 重点代码 """ from socket import * # 创建udp套接字 sockfd = socket ( AF_INET , SOCK_DGRAM ) # 绑定地址

网络编程基础

放肆的年华 提交于 2019-12-22 08:25:12
软件开发的架构 两个程序之间的通讯的应用大致可以分两种: 第一种是应用类: qq , 微信 , 网盘 , 优酷 , 这一类是属于需要安装的桌面应用 第二种shi web类: 比如百度 ,知乎, 博客园, 等使用浏览器访问就可以直接使用的应用 这些应用的本质其实都是连个程序之间的通讯,而这两个分类又对应了两个软件开发的架构 1 . C/S架构 C/S 即: Client与Server, 中文意思是: 客户端与服务端的架构, 这种架构也是从用户层面(也可以是物理层面)来划分的 这里的客户端一般泛指客户端应用程序EXE,程序需要先安装后,才能运行在用户的电脑上,对用户的电脑操作系统环境依赖较大。 2.B/S架构 B/S即: Browser与Server ,中文意思 :浏览器端与服务端架构,这种架构师从用户层面来划分的 Browser浏览器,其实也是一种Client客户端,只是这个客户端不需要大家去安装什么应用程序,只需在浏览器上通过HTTP请求服务器端相关的资源(网页资源),客户端Browser浏览器就能进行增删改查。 网络基础 网络基础 1.一个程序如何在网络上找到另一个程序?   首先,程序必须要启动,其次,必须有这台机器的地址,我们都知道我们人的地址大概就是国家\省\市\区\街道\楼\门牌号这样字。那么每一台联网的机器在网络上也有自己的地址,它的地址是怎么表示的呢?

Python多种方式实现并发的Web Server

喜欢而已 提交于 2019-12-22 04:07:30
什么是epoll 我们在 Python多种方式实现并发的Web Server 的最后使用单进程+单线程+非阻塞+长连接实现了一个可并发处理客户端连接的服务器。他的原理可以用以下的图来描述: 解释: 1.HTTP服务器是我们使用 单进程+单线程+非阻塞+长连接实现 的web服务器。 2.在实现的时候,我们创建了一个存放已接受Socket连接的列表,该列表是在应用程序的内存空间中的。如图中深蓝色部分 3.当有3个客户端接入的时候,列表中一共存在3个对应的socket句柄,分别对应三个小黄框。 4.灰色小框代表服务器接收请求的socket。 5.我们在进行无限循环的时候,首先是检查是否有新的客户端接入,相当于检查灰色小框是否有数据到达。然后轮询3个小黄框对应socket是否有数据到达。轮询的效率是很低的。 6.服务器在使用accept和recv时,实际上是委托操作系统帮他检查是否有数据到达,由于这个列表的socket都处于用户内存空间,所以需要将其复制到内核空间。操作系统检查完毕后,如果有数据就返回数据给应用程序,如果没有数据就以异常的方式通知应用程序。而且不光这样,操作系统可能还同时在运行其他的应用程序,这样效率会非常低。 我们再来看epoll的图: 解释: 1.我们可以看到,在结构上,最大的区别在于,存放socket的列表不处于应用程序内部。在epoll中

C++ Socket编程

元气小坏坏 提交于 2019-12-22 03:36:15
在很多底层网络应用开发者的眼里一切编程都是Socket,话虽然有点夸张,但却也几乎如此了,现在的网络编程几乎都是用Socket来编程。你想过这些情景么?我们每天打开浏览器浏览网页时,浏览器进程怎么和Web服务器进行通信的呢?当你用QQ聊天时,QQ进程怎么和服务器或者是你的好友所在的QQ进程进行通信的呢?当你打开PPstream观看视频时,PPstream进程如何与视频服务器进行通信的呢? 如此种种,都是靠Socket来进行通信的,以一斑窥全豹,可见Socket编程在现代编程中占据了多么重要的地位,这一节我们将介绍C++语言中如何进行Socket编程。 什么是Socket? Socket起源于Unix,而Unix基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。Socket就是该模式的一个实现,网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。Socket也具有一个类似于打开文件的函数调用:Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。 Socket类型有三种:流式Socket(SOCK_STREAM),数据报式Socket(SOCK_DGRAM)和原始套接字(SOCK_RAW)。 流式套接字(SOCK

c++socket编程(2)

旧街凉风 提交于 2019-12-22 03:35:39
Socket socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。 在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服 务。Socket正如其英文原意那样,像一个多孔插座。一台主机犹如布满各种插座的房间,每个插座有一个编号,有的插座提供220伏交流电, 有的提供110伏交流电,有的则提供有线电视节目。 客户软件将插头插到不同编号的插座,就可以得到不同的服务。 有三种不同形式的套接字: 流式套接字(SOCK_STREAM) 流套接字用于提供面向连接、可靠的数据传输服务。该服务将保证数据能够实现无差错、无重复发送,并按顺序接收。流套接字之所以能够实现可靠的数据服务,原因在于其使用了传输控制协议,即TCP(The Transmission Control Protocol)协议。 数据包套接字(SOCK_DGRAM) 数据包套接字提供了一种无连接的服务。该服务并不能保证数据传输的可靠性,数据有可能在传输过程中丢失或出现数据重复,且无法保证顺 序地接收到数据。数据包套接字使用UDP(User Datagram

MFC网络编程

白昼怎懂夜的黑 提交于 2019-12-22 03:34:47
最近这段时间,一直都在学习套接字编程,下面就写写自己学习的一些相关知识,也算是学习笔记吧(这篇文章主要参考孙鑫老师的教学视频和相关文档)。 首先是关于WinSocket网络编程方面的: 一、套接字的类型: 主要有三类: 1、 流式套接字(SOCK_STREAM), 主要提供面向连接、可靠地数据传输服务,数据能够无差错的无重复的发送,并且能够按顺序的进行接收, 主要基于TCP协议实现的 2、 数据报式套接字(SOCK_DGRAM), 主要提供无连接的服务,数据包能够独立的进行发送,不提供无错保证,数据可能会丢失或者重复,并且接收的顺序比较混乱,这种类型主要 基于UDP协议 实现的,所以这种类型的 即时性比较高 。(聊天通讯软件一般都是采用这种形式实现的) 3、原始套接字(SOCK_RAW),这种套接字一定要在root下使用,可以接受到本机网卡上的数据帧或者数据包,对于监听网络的流量和分析是很有作用的。 二、基于TCP(面向连接)socket编程的程序编写流程: 1、服务器端程序流程 a、创建套接字(socket)。 b、将套接字绑定到一个本地地址和端口上(bind)。 c、将套接字设为监听模式,准备接受客户请求(listen)。 d、等待客户请求到来;当请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept) e、用返回的套接字和客户端进行通信(send/recv

开始学习winsock编程

点点圈 提交于 2019-12-22 03:34:18
winsock编程总体思路 一 基于TCP(面向连接)的socket编程 1 服务器程序: 创建套接字(socket) 将套接字绑定到一个本地地址和端口上(bind) 将套接字设为监听模式,准备接受客户请求(listen) 等待客户请求到来,当请求到来后,接受连接请求,返回一个新的对应于此连接的套接字(accept) 用返回的套接字和客户端进行通信(sendrev) 返回,等待另一个客户请求 关闭套接字 ----------- 2 客户端程序: 创建套接字(socket) 向服务器发出连接请求(connect) 和服务器端进行通信(sendrev) 关闭套接字 二 基于UDP(面向无连接)的socket编程 1服务端 创建套接字 将套接字绑定到一个本地地址和端口上 等待接受数据(recfrom) 关闭套接字 2 客户端 创建套接字 向服务器发送数据(sendto) 关闭套接字 三 什么是套接字 套接字==电话机 IP地址==总机号码 端口===分机号 套接字分类: 1 流式套接字(SOCK_STREAM) 提供面向连接,可靠的数据传输服务,数据无差错,无重复的发送,且按发送顺序接受。 2 数据报格式套接字(SOCK_DGRAM) 提供无连接服务。数据包以独立形式发送,不提供无错保证,数据可能丢失或重复,并且接受顺序混乱。 3 原始套接字(SOCK_RAM) 程序: 1

WinCE下Socket基本函数

泄露秘密 提交于 2019-12-22 03:33:38
在软件开发中“网络编程”是必不可少的基本功了;本文所讲的Socket编程也就是网络编程中的一种形式;当然你如果想问我什么叫“Socket”,很遗憾的是我也不能准确的告诉你!但我们可以确定的是Sock并不是一种网络协议,它只是一个网络编程接口,也就是说,它不是协议,但是它可以访问很多种网络协议,你可以把他当作一些协议的封装。 Socket编程涉及Socket服务端与客户端编程;与VC6下的Socket编程一样(VC6用ws2_32.lib库,而WinCE则用Ws2.lib库),服务端与客户端编程都需经历如下步骤: 服务端步骤: 1:加载套接字库,创建套接字(WSAStartup()/socket()); 2:绑定套接字到一个IP地址和一个端口上(bind()); 3:将套接字设置为监听模式等待连接请求(listen()); 4:请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept()); 5:用返回的套接字和客户端进行通信(send()/recv()); 6:返回,等待另一连接请求; 7:关闭套接字,关闭加载的套接字库(closesocket()/WSACleanup())。 客户端步骤: 1:加载套接字库,创建套接字(WSAStartup()/socket()); 2:向服务器发出连接请求(connect()); 3:和服务器端进行通信(send()/recv