没有合适的资源?快使用搜索试试~ 我知道了~
在网络通信中socket几乎无处不在,它可以看成是应用层与TCP/IP协议簇通信的中间软件抽象层,是两个应用程序彼此进行通信的接口,并且把复杂的TCP/IP协议细节隐藏在接口之后。Python提供了socket模块,可以非常方便的进行socket编程。 创建一个server socket 使用socket方法创建一个新的socket,通常提供两个参数,第一个参数是address family, 第二个是socket type。 #create an INET, STREAMing socket s = socket.socket(socket.AF_INET, socket.SOCK_STR
资源推荐
资源详情
资源评论
Python中基础的中基础的socket编程实战攻略编程实战攻略
在网络通信中socket几乎无处不在,它可以看成是应用层与TCP/IP协议簇通信的中间软件抽象层,是两个应用程序彼此进行
通信的接口,并且把复杂的TCP/IP协议细节隐藏在接口之后。Python提供了socket模块,可以非常方便的进行socket编程。
创建一个创建一个server socket
使用socket方法创建一个新的socket,通常提供两个参数,第一个参数是address family, 第二个是socket type。
#create an INET, STREAMing socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
以上创建了一个address family为IP协议,并且传输协议为TCP的socket。
服务器端在创建一个socket之后,需要绑定到一个IP地址与端口,提供服务,这就要用到bind方法。
# bind the socket to all available interfaces on port 8888
s.bind(('', 8888))
使用listen方法,将socket设置为监听状态。listen方法后面跟一个参数,表示最多可以在队列里面接收的请求数目。
#become a server socket
serversocket.listen(5)
现在,我们已经创建了一个server socket,然后编写一个无限循环体,接收来自客户端的连接,利用accept方法,它返回一个
新的socket,表示与远端的连接,同时返回一个地址对,表示远端连接的IP地址与端口号。
# enter the main loop of the web server
while 1:
#accept connections from outside, return a pair (conn, addr)
(clientsocket, address) = serversocket.accept()
#now do something with the clientsocket
#in this case, we'll pretend this is a threaded server
ct = client_thread(clientsocket)
ct.run()
通常,循环体中的server socket不会发送和接收任何数据,而仅仅是接收来自远端的连接,将新的连接交给其他的线程去处
理,然后就继续侦听更多其他的连接,否则的话在处理一个连接的时候,就无法接受其他新的连接了。
接下来,我们新建一个线程对连接进行处理。首先,使用recv方法接受来自socket的数据,后面带着一个参数表示一次最多可
以接受数据的大小。然后使用sendall方法回复socket,sendall不断发送数据直到所有数据发送完毕或者发生了异常。最后,
需要记得把socket关闭,因为每个socket就代表了系统中的一个文件描述符,如果没有及时关闭,可能会超过系统最大文件描
述符的数量,导致无法创建新的socket。
def handle_request(sock, addr):
print "Accept new connection from {addr}".format(addr = addr)
request_data = client_connection.recv(1024)
print request_data.decode()
http_response = "Hello, world!"
# send response data to the socket
sock.sendall(http_response)
sock.close()
总结server socket主要由以下几个步骤:
创建一个新的server socket;
将socket绑定到一个地址和端口;
侦听远程进来的连接;
接受连接, 分发给其他线程处理。
以下是完整的server socket示例代码:
import socket
import threading
SERVER_ADDRESS = (HOST, PORT) = '', 8888
REQUEST_QUEUE_SIZE = 1024
def handle_request(sock, addr):
print "Accept new connection from {addr}".format(addr = addr)
资源评论
weixin_38548507
- 粉丝: 5
- 资源: 961
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- HIVE-14706.01.patch
- C# WInForm IrisSkin2皮肤控件
- svn cleanup 失败怎么办
- Spring Boot集成Spring Security,HTTP请求授权配置:包含匿名访问、允许访问、禁止访问配置
- 易语言-画曲线模块及应用例程
- 电子元件行业知名厂商官网(TI/NXP/ST/Infineon/ADI/Microchip/Qualcomm/Diodes/Panasonic/TDK/TE/Vishay/Molex等)数据样例
- Cytoscape-3-10-0-windows-64bit.exe
- 基于STM32设计的宠物投喂器项目源代码(高分项目).zip
- 机器学习音频训练文件-24年抖音金曲
- 工业以太网无线通信解决方案
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功