前言:
今天你们对“pythonsocket阻塞”大体比较看重,小伙伴们都想要了解一些“pythonsocket阻塞”的相关文章。那么小编同时在网上搜集了一些有关“pythonsocket阻塞””的相关资讯,希望朋友们能喜欢,姐妹们快快来了解一下吧!Python3.X 模块 socket代码实训前言
网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。
建立网络通信连接至少要一对端口号(socket)。socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。
Socket的英文原义是“孔”或“插座”。作为BSD UNIX的进程通信机制,取后一种意思。
通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。
在Internet上的主机一般运行了多个服务软件,同时提供几种服务。
每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。
Socket正如其英文原义那样,像一个多孔插座。一台主机犹如布满各种插座的房间,每个插座有一个编号,有的插座提供220伏交流电, 有的提供110伏交流电,有的则提供有线电视节目。 客户软件将插头插到不同编号的插座,就可以得到不同的服务。
通过这个模块我们可以自己写程序的server端和client端,可以自己定义server端对外提供服务器的ip地址和端口。学会使用这个模块的之后我们不仅可以开往网络程序,还可以利用socket模块开发出端口扫描的程序。
代码实现
创建服务器端代码:
import socketip_port = ('127.0.0.1', 9999)# 创建socket对象并指定连接的网络类型和传输协议sk = socket.socket(socket.AF_INET, socket.SOCK_STREAM)sk.bind(ip_port)# 启动监听,并设置最多可以通知连入连接数sk.listen(5)while True: print('server is waitting...') ''' 进入accept阻塞状态来等待客户端的连接请求 保存客户端的连接状态和客户端的地址 ''' conn,addr = sk.accept() # print(addr) # print(conn) # 如果有客户端发来请求就每次都只接受1024个字节的内容,注意recv()也是阻塞的 client_data = conn.recv(1024) print(client_data) conn.send('I am server.'.encode('utf-8')) conn.close()
clinet 端代码实现:
#!/usr/bin/env pythonimport socketip_port = ('127.0.0.1', 9999)# 创建socket实例,参数不填的话就采用ipv4协议通过tcp传输sk = socket.socket()sk.connect(ip_port)client_send = 'I am client.'.encode('utf-8')sk.send(client_send)server_reply = sk.recv(1024)print(server_reply)sk.close()
通过以上两段代码的运行,我们就实现了server端与client端的通信
在server端可以到如下运行结果,接收到客户端请求之后又恢复到了等待状态
server waiting...
b'I am client'
server waiting...
在client端也看到了类似的结果,成功接收到了server端的发来的信息之后退出了程序
I am server
以上只是利用了socket的里面必要执行的方法,实际上还有很多很多方法可以对socket程序进行更加细致的设置
模块其他常见使用
socket 参数
socket 方法
标签: #pythonsocket阻塞