recv

python之网络编程(socket)

≡放荡痞女 提交于 2019-12-23 13:02:27
目录 一、socket介绍 二、方法说明 三、实例 四、粘包 五、socketserver实现并发 一、socket介绍 socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求。 socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,对于文件用【打开】【读写】【关闭】模式来操作。socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭) socket和file的区别: file模块是针对某个指定文件进行【打开】【读写】【关闭】 socket模块是针对 服务器端 和 客户端Socket 进行【打开】【读写】【关闭】 二、方法说明 import socket socket.socket(socket_family,socket_type,protocal=0) socket_family 可以是 AF_UNIX 或 AF_INET。socket_type 可以是 SOCK_STREAM 或 SOCK_DGRAM。protocol 一般不填,默认值为 0。 获取tcp/ip套接字 tcpSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 获取udp

python 网络编程

[亡魂溺海] 提交于 2019-12-23 10:49:35
什么是socket? Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。所以无需深入理解tcp/udp协议,因为socket已经封装好了,使用者只需要遵循socket的规定去编程,写出的程序自然就是遵循tcp/udp标准的。 ps:ip是用来标识互联网中的一台主机的位置,而port是用来标识这台机器上的一个应用程序,ip地址是配置到网卡上的,而port是应用程序开启的,ip与port的绑定就标识了互联网中独一无二的一个应用程序 套接字分类 基于文件类型的套接字家族:AF_UNIX unix一切皆文件,基于文件的套接字调用的就是底层的文件系统来取数据,两个套接字进程运行在同一机器,可以通过访问同一个文件系统间接完成通信 基于网络类型的套接字家族:AF_INET (还有AF_INET6被用于ipv6,还有一些其他的地址家族,不过,他们要么是只用于某个平台,要么就是已经被废弃,或者是很少被使用,或者是根本没有实现,所有地址家族中,AF_INET是使用最广泛的一个,python支持很多种地址家族,但是由于我们只关心网络编程,所以大部分时候我么只使用AF_INET。 套接字工作流程

socket基本使用

我只是一个虾纸丫 提交于 2019-12-23 03:44:22
UDP发送和接收 MainRecv.cpp #include <iostream> #include <WinSock2.h> #include <sstream> #pragma comment(lib,"ws2_32.lib") #define RECV_IP "127.0.0.1" #define RECV_PORT 8899 #define LEN_RECV_BUF 2048 int main() { std::ostringstream ossTemp; WSAData wsaData; std::cout<<"Start..."<<std::endl; WSAStartup(MAKEWORD(2,2),&wsaData); SOCKET sktRecv=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP); sockaddr_in addrRecv; addrRecv.sin_family=AF_INET; addrRecv.sin_addr.s_addr=inet_addr(RECV_IP); //htonl(INADDR_ANY); addrRecv.sin_port=htons(RECV_PORT); int retVal; retVal=bind(sktRecv,(sockaddr*)&addrRecv,sizeof(addrRecv))

Using recvfrom() with raw sockets : general doubt

孤者浪人 提交于 2019-12-22 14:43:20
问题 I have created a raw socket which takes all IPv4 packets from data link layer (with data link layer header removed). And for reading the packets I use recvfrom . My doubt is: Suppose due to some scheduling done by OS, my process was asleep for 1 sec. When it woke up,it did recvfrom (with number of bytes to be received say 1000) on this raw socket (with the intention of receiving only one IPv4 packet and say the size of this packet is 380 bytes). And suppose many network applications were also

C Windows buffer size

半世苍凉 提交于 2019-12-22 12:18:23
问题 In windows lets say i'm using the recv function to receive data from a socket. I'm curious how big would an optimal buffer be? I could make it 1024 bytes or I could make it 51200 bytes, or bigger. I'm wondering which one would be better for performance. This doesn't only apply to the recv function, lets say im reading a large text file, do i want a very large buffer, or a smaller buffer? 回答1: THe operating system performs its own buffering, so the size of your buffer does not really matter.

DJango基础框架简介

心不动则不痛 提交于 2019-12-22 05:55:07
一:web框架基础简介 【1】web框架本质   (1)web本质也是C/S架构   (2)浏览器:客户端   (2)服务端:服务端 【2】web框架自定义 import socket server = socket.socket() server.bind(('127.0.0.1',8080)) server.listen(6) while True: conn ,addr = server.accept() # 字符串 recv_data = conn.recv(1024).decode('utf-8') print(recv_data) conn.send(b'hello world') conn.close() (1)客户端结果展示 (2)服务端结果展示 '''b'GET / HTTP/1.1\r\nHost: 127.0.0.1:8080\r\nConnection: keep-alive\r\nCache-Control: max-age=0\r\nUpgrade-Insecure-Requests: 1\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36\r

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中

Ending “recv()” loop when all information is Read using Winsock

为君一笑 提交于 2019-12-21 13:06:35
问题 I am having an issue in my recv() loop for winsock. I am trying to terminate the loop when iResult==0, however, the loop only ends when the socket closes. It appears to be hanging at the very last recv() where iResult would equal 0. So any ideas on how to terminate the loop effectively? My ultimate goal (whether iResult == 0 or not; perhaps I am going about this the wrong way) is to stop the loop when all the sent information has been read. Here is the loop. do { iResult = recv(socket,

Determine how many bytes can be sent with winsock (FIONWRITE)?

风格不统一 提交于 2019-12-21 05:31:45
问题 With select I can determine if any bytes can be received or sent without blocking. With this function I can determine how many bytes can be received: function BytesAvailable(S: TSocket): Integer; begin if ioctlsocket(S, FIONREAD, Result) = SOCKET_ERROR then Result := -1; end; Is there also a way to determine how many bytes can be sent? So I can be sure when I call send with N bytes, it will return exactly N bytes sent (or SOCKET_ERROR) but not less (send buffer is full). FIONWRITE is not

python之-- socket 基础篇

╄→尐↘猪︶ㄣ 提交于 2019-12-21 01:18:38
socket 网络模块 注意事项:在python3中,所有数据的传输必须用bytes类型(bytes只支持ascii码)所以在发送数据的时候要么在发送的字符串前面加 'b',要么使用encode('utf-8')进行转换成bytes类型发送,但是在接收端必须用decode()进行转码。 1、Socket 类型 套接字格式: socket(family,type[,protocal]) 使用给定的地址族(网络层)、套接字类型(传输层)、协议编号(默认为0)来创建套接字。 socket类型 描述 socket.AF_UNIX 只能够用于单一的Unix系统进程间通信 socket.AF_INET 服务器之间网络通信 socket.AF_INET6 IPv6 socket.SOCK_STREAM 流式socket , for TCP socket.SOCK_DGRAM 数据报式socket , for UDP socket.SOCK_RAW 原始套接字,普通的套接字无法处理ICMP、IGMP等网络报文,而SOCK_RAW可以;其次,SOCK_RAW也可以处理特殊的IPv4报文;此外,利用原始套接字,可以通过IP_HDRINCL套接字选项由用户构造IP头。 socket.SOCK_SEQPACKET 可靠的连续数据包服务 创建TCP Socket: s= socket.socket