Python套接字函数 python编写函数接收一个字符串

向大侠们请教,Python可以直接创建原始套接字吗1.TCP流式套接字的编程步骤 在使用之前须链接库函数:工程-设置-Link-输入ws2_32.lib,OK! SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);//创建套接字(socket) 。SOCKADDR_IN addrSrv; addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);...
如何使用证书存储在python中的字符串变量打开ssl套接字查看源代码,ssl.wrap_socket直接调用本地代码(openssl)函数SSL_CTX_use_cert_chain_file,它需要一个文件的路径 , 因此您无法做的是尝试做的 。
参考:
在ssl
/
init
.py中,我们看到:
def
wrap_socket(sock,keyfile
=无,certfile
=无,
server_side
=
False,cert_reqs
=
CERT_NONE ,
ssl_version
=
【Python套接字函数 python编写函数接收一个字符串】PROTOCOL_SSLv23,ca_certs
=
None,
do_handshake_on_connect
=
True):
return
SSLSocket
sock,keyfile
=
keyfile,certfile
=
certfile ,
server_side
=
server_side,cert_reqs
=
cert_reqs,
ssl_version
=
ssl_version , ca_certs
=
ca_certs,
do_handshake_on_connect
=
do_handshake_on_connect)
将我们指向SSLSocket构造函数(它在同一个文件中),我们看到以下情况:
self._sslobj
=
_ssl2.sslwrap(self._sock,server_side ,
keyfile,certfile ,
cert_reqs,ssl_version , ca_certs)
_ssl2在C(_ssl2.c)中实现
查看sslwrap函数,我们看到它正在创建一个新对象:
return(PyObject
*)newPySSLObject(Sock , key_file
,cert_file,
server_side,verification_mode,
protocol , cacerts_file);
查看该对象的构造函数,我们最终会看到:
ret
=
SSL_CTX_use_certificate_chain_file(self-
ctx,
cert_file);
这个函数在openssl中定义,所以现在我们需要切换到那个代码库 。
在ssl
/
ssl_rsa.c中,我们最终在函数中找到:
BIO_read_filename
in,file)
如果你深入到BIO代码(openssl的一部分)最终成为正常的fopen():
fp
=
fopen(ptr,p)
所以它看起来像它当前写的 。它必须在C的fopen()可打开的文件中 。
此外 , 由于python的ssl库很快跳转到C,我在一个解决方法中看不到一个明显的monkeypatch的地方 。
python socket编程中listen和accept的区别listen函数在一般在调用bind之后-调用accept之前调用,它的函数原型是:
intlisten(int sockfd, int backlog)
参数sockfd
被listen函数作用的套接字,sockfd之前由socket函数返回 。在被socket函数返回的套接字fd之时,它是一个主动连接的套接字 , 也就是此时系统假设用户会对这个套接字调用connect函数,期待它主动与其它进程连接 , 然后在服务器编程中,用户希望这个套接字可以接受外来的连接请求,也就是被动等待用户来连接 。由于系统默认时认为一个套接字是主动连接的,所以需要通过某种方式来告诉系统,用户进程通过系统调用listen来完成这件事 。
参数backlog
这个参数涉及到一些网络的细节 。进程处理一个一个连接请求的时候,可能还存在其它的连接请求 。因为TCP连接是一个过程,所以可能存在一种半连接的状态,有时由于同时尝试连接的用户过多,使得服务器进程无法快速地完成连接请求 。如果这个情况出现了,服务器进程希望内核如何处理呢?内核会在自己的进程空间里维护一个队列以跟踪这些完成的连接但服务器进程还没有接手处理或正在进行的连接,这样的一个队列内核不可能让其任意大,所以必须有一个大小的上限 。这个backlog告诉内核使用这个数值作为上限 。
毫无疑问,服务器进程不能随便指定一个数值,内核有一个许可的范围 。这个范围是实现相关的 。很难有某种统一,一般这个值会小30以内 。
accept函数
摘要:accept()用来接受参数s的socket连接,它的函数原型是:
intaccept(int s,struct sockaddr * addr,int * addrlen)
服务程序调用accept函数从处于监听状态的流套接字s的客户连接请求队列中取出排在最前的一个客户请求,并且创建一个新的套接字来与客户套接字创建连接通道 , 如果连接成功,就返回新创建的套接字的描述符,以后与客户套接字交换数据的是新创建的套接字;如果失败就返回 INVALID_SOCKET 。该函数的第一个参数指定处于监听状态的流套接字;操作系统利用第二个参数来返回新创建的套接字的地址结构;操作系统利用第三个参数来返回新创建的套接字的地址结构的长度 。
关于Python套接字函数和python编写函数接收一个字符串的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息 , 记得收藏关注本站 。

    推荐阅读