套接字

Python 网络编程(一)

核能气质少年 提交于 2020-01-02 20:25:51
Python 网络编程 socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求。 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者。 socket和file的区别: file模块是针对某个指定文件进行【打开】【读写】【关闭】 socket模块是针对 服务器端 和 客户端Socket 进行【打开】【读写】【关闭】 socket服务端和客户端的网络请求应答过程如下图所示: 一、TCP socket编程 TCP 服务端 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 import socket ip = '0.0.0.0' port = 8888 sk = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sk.bind((ip, port)) sk.listen( 5 ) while True : conn, addr = sk.accept() print ( "%s 已连接" % addr[ 0 ]) conn.sendall(bytes( "hello" , encoding = "utf-8" )) while True :

python基础之socket与socketserver

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

Python 31 TCP协议 、socket套接字

我怕爱的太早我们不能终老 提交于 2020-01-01 19:57:20
1、TCP协议 可靠传输,TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包不必再分割。 (1)三次握手建链接 (2)四次挥手断开链接 (3)tcp协议的状态 (4)syn洪水攻击与半连接池 1、一开始,建立连接之前服务器和客户端的状态都为CLOSED; 2、服务器创建socket后开始监听,变为LISTEN状态; 3、客户端请求建立连接,向服务器发送SYN报文,客户端的状态变味SYN_SENT; 4、服务器收到客户端的报文后向客户端发送ACK和SYN报文,此时服务器的状态变为SYN_RCVD; 5、然后,客户端收到ACK、SYN,就向服务器发送ACK,客户端状态变为ESTABLISHED; 6、服务器端收到客户端的ACK后变为ESTABLISHED。此时3次握手完成,连接建立! 三次挥手 由于TCP连接是全双工的,断开连接会比建立连接麻烦一点点。 1、客户端先向服务器发送FIN报文,请求断开连接,其状态变为FIN_WAIT1; 2、服务器收到FIN后向客户端发送ACK,服务器的状态围边CLOSE_WAIT; 3、客户端收到ACK后就进入FIN_WAIT2状态,此时连接已经断开了一半了。如果服务器还有数据要发送给客户端,就会继续发送; 4、直到发完数据,就会发送FIN报文,此时服务器进入LAST

socket编程

社会主义新天地 提交于 2020-01-01 19:56:37
什么是socket Socket是应用层与 TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中, Socket其实就是一个门面模式,它把复杂的 TCP/IP协议族隐藏在 Socket接口后面,对用户来说,一组简单的接口就是全部,让 Socket去组织数据,以符合指定的协议。 所以,我们无需深入理解tcp/udp协议,socket已经为我们封装好了,我们只需要遵循socket的规定去编程,写出的程序自然就是遵循tcp/udp标准的。 基于文件类型的套接字家族 套接字家族的名字:AF_UNIX unix一切皆文件,基于文件的套接字调用的就是底层的文件系统来取数据,两个套接字进程运行在同一机器,可以通过访问同一个文件系统间接完成通信 基于网络类型的套接字家族 套接字家族的名字:AF_INET (还有AF_INET6被用于ipv6,还有一些其他的地址家族,不过,他们要么是只用于某个平台,要么就是已经被废弃,或者是很少被使用,或者是根本没有实现,所有地址家族中,AF_INET是使用最广泛的一个,python支持很多种地址家族,但是由于我们只关心网络编程,所以大部分时候我么只使用AF_INET) 套接字函数用法 服务端套接字函数 s.bind() 绑定(主机,端口号)到套接字 s.listen() 开始TCP监听 s.accept() 被动接受TCP客户的连接,(阻塞式

socket编程

☆樱花仙子☆ 提交于 2020-01-01 19:56:19
Socket是应用层与 TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中, Socket其实就是一个门面模式,它把复杂的 TCP/IP协议族隐藏在 Socket接口后面,对用户来说,一组简单的接口就是全部,让 Socket去组织数据,以符合指定的协议。 所以,我们无需深入理解tcp/udp协议,socket已经为我们封装好了,我们只需要遵循socket的规定去编程,写出的程序自然就是遵循tcp/udp标准的。 也有人将socket说成ip+ port,ip是用来标识互联网中的一台主机的位置,而port是用来标识这台机器上的一个应用程序,ip地址是配置到网卡上的,而port是应用程序开启的,ip与port的绑定就标识了互联网中独一无二的一个应用程序 而程序的pid是同一台机器上不同进程或者线程的标识 服务端先初始化socket,然后与端口绑定bind(),里面是一个元组,包括自己的IP和端口,然后监听该端口listen,调用accept阻塞,等待客户端连接。如果此时有客户端初始化socket,连接服务端connect,如果连接成功,这是客户端就可以向服务端发送数据请求,服务端接收并处理,并把结果返回给客户端,最后关闭连接,一次交互结束。 ''' 套接字类型:基于文件类型的套接字家族和基于网络类型的套接字家族 AF_UNIX:基于文件类型的套接字家族,基本不用

Android 蓝牙开发(1)

ぐ巨炮叔叔 提交于 2019-12-31 19:14:34
普通蓝牙设备官方文档 Android 平台包含蓝牙网络堆栈支持 ,凭借此支持,设备能以无线方式与其他蓝牙设备交换数据。应用框架提供了通过 Android Bluetooth API 访问蓝牙功能的途径。使用 Bluetooth API Android 应用可以执行下面的操作: 扫描其他蓝牙设备 查询本地蓝牙适配器的配对蓝牙设备 建立 RFCOMM 通道 通过服务发现连接到其他设备 与其他设备进行双向数据传输 管理多个连接 传统蓝牙适用于电池使用强度较大的操作,例如 Android 设备之间的流传输和通信等。针对具有低功耗要求的蓝牙设备,Android 4.3(API 18)中引入了面向低功耗蓝牙的 API 支持。 基础知识 使用 Android Bluetooth API 来完成使用蓝牙进行通信的四项主要任务: 设置蓝牙 、 查找局部区域内的配对设备 或可用设备、 连接设备 ,以及在 设备之间传输数据 。 关于蓝牙的 API 在 android.bluetooth 包中,下面介绍一下和蓝牙相关的主要类 BluetoothAdapter 本地蓝牙适配器,是所有 蓝牙交互的入口点 ,表示蓝牙设备自身的一个蓝牙设备适配器, 整个系统只有一个蓝牙适配器 。通过它可以发现其他蓝牙设备,查询绑定(配对)设备的列表,使用已知的 Mac 地址实例化 BluetoothDevice 以及创建

socket套接字通信和粘包问题

人盡茶涼 提交于 2019-12-30 10:19:27
socket套接字通信: 什么是socket? socket是一个模块,又称套接字,用来封装互联网协议(应用层以下的层)。 为什么要有socket? socket可以实现 互联网协议 应用层以下的层的工作 -提高开发效率 怎么使用socket? import socket 写socket套接字: Client Server server.py #服务端 import socket #获取手机 server = socket.socket() #绑定ip地址,port端口 server.bind(('127.0.0.1',8500)) #半连接池 server.listen(5)#最多5个人坐椅子,实际上==6 print('server is running') while True: #conn为通道 ,等待电话的接入 conn,addr = server.accept() print(addr) while True: try: #接听对方假话的内容 #data客户端发送过来的消息 date = conn.recv(1024) print(date.decode('utf-8')) if len(date) == 0: break if date.decode('utf-8') == 'q': break send_date = input("服务端>>:")

socket套接字

[亡魂溺海] 提交于 2019-12-30 10:19:15
socket套接字 端口号: ​ 0-1024: 禁用,操作系统在用 ​ 用8000以上的 软件固定的端口号: ​ django: 8000 ​ mysql: 3306 ​ redis: 6379 ​ flask: 5000 ​ tomcat:8080 ​ mongodb:27017 1.TCP协议:三次握手,四次挥手 ​ TCP协议建立双向通道 ​ 三次握手,建立连接: ​ 1.客户端向服务端发送建立连接的请求 ​ 2.服务端返回接收请求的信息给客户端,并且发送送往客户端建立连接的请求 ​ 3.客户端接收到服务端发来的请求,返回同意信息给服务端,完成双向连接 反馈机制: 客户端往服务端发送请求,服务端必须返回响应,告诉客户端收到请求了,并且将服务端的数据一并返回给客户端 一次请求必须要有一次响应 缺点: ​ 洪水攻击: ​ 指的是通过伪造大量的请求,往对方服务器发送请求,导致对方服务器响应跟不上,以至于瘫痪 ​ 在linux系统中有一个参数可以限制 ​ 半连接池listen:限制用户在同一时间段内的访问数量 ​ 四次挥手,断开连接 1.客户端向服务端发送断开连接的请求 2.服务端返回收到请求的信息给客户端 3.服务器确认所有的数据接收完成后,再发送同意断开连接的请求给客户端,同时发送断开连接的请求 4.客户端返回同意断开连接的请求,给服务端 ​ socket套接字通信:

epoll、多线程模型

我怕爱的太早我们不能终老 提交于 2019-12-29 14:50:12
如何切换epoll event_loop.c 文件的 event_loop_init_with_name 函数是关键,通过宏 EPOLL_ENABLE 来决定是使用 epoll 还是 poll 的。 struct event_loop * event_loop_init_with_name ( char * thread_name ) { . . . # ifdef EPOLL_ENABLE yolanda_msgx ( "set epoll as dispatcher, %s" , eventLoop -> thread_name ) ; eventLoop -> eventDispatcher = & epoll_dispatcher ; # else yolanda_msgx ( "set poll as dispatcher, %s" , eventLoop -> thread_name ) ; eventLoop -> eventDispatcher = & poll_dispatcher ; # endif eventLoop -> event_dispatcher_data = eventLoop -> eventDispatcher -> init ( eventLoop ) ; . . . } 根目录下的 CMakeLists.txt 文件里,引入

37 - 网络编程-UDP编程

别说谁变了你拦得住时间么 提交于 2019-12-27 09:13:46
目录 1 UDP协议 2 UDP通信流程 3 UDP编程 3.1 构建服务端 3.3 常用方法 4 聊天室 5 UDP协议应用 1 UDP协议 UDP是面向无连接的协议, 使用UDP协议时,不需要建立连接,只需要知道对方的IP地址和端口号,就可以直接发数据包 。但是,能不能到达就不知道了。虽然用UDP传输数据不可靠,但它的优点是和TCP比,速度快,对于不要求可靠到达的数据,就可以使用UDP协议。 2 UDP通信流程 我们先来了解一下,python的socket的通讯流程: 服务端: 创建Socket对象 绑定IP地址Address和端口Port,使用bind方法,IPv4地址为一个二元组('IP',Port), 一个UDP端口只能被绑定一次 接受数据,recvfrom方法,使用缓冲区接受数据 发送数据,sendto方法,类型为bytes 关闭连接 客户端: 创建Socket对象 连接服务端。connect方法(可选) 发送数据,sendto/send方法,类型为bytes 接受数据,recvfrom/recv方法,使用缓冲区接受数据 关闭连接 我们可以看到UDP不需要维护一个连接,所以比较简单 3 UDP编程 使用udp编程和使用tcp编程用于相似的步骤,而因为udp的特性,它的服务端不需要监听端口,并且客户端也不需要事先连接服务端。根据上图,以及建立服务端的流程