博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python爬虫 socket库实践——模拟连接发送接收数据
阅读量:3958 次
发布时间:2019-05-24

本文共 2083 字,大约阅读时间需要 6 分钟。

Python爬虫(八)

学习Python爬虫过程中的心得体会以及知识点的整理,方便我自己查找,也希望可以和大家一起交流。

—— socket库实践 模拟连接发送接收数据 ——

文章目录

1.基于TCP协议的模拟服务端

  1. 引入socket库。

    import socket
  2. 设置socket,主机和端口,并将主机名和端口绑定在一起,同时开启侦听。

    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)host = socket.gethostname()port = 1234s.connect((host, port))s.listen(5)
  3. 设置一个循环,确保可以接受多个申请。

    while True:	connection, address = s.accept()	print ('Got connection from', address)
  4. 可以设置Socket超时时间。

    connection.settimeout(5)
  5. 设置接受数据,并规定接受数据的长度,防止接收包过大。

    buf = connection.recv(1024)
  6. 转换类型,由于Python 3 的新规定,发送的必须是bytes类型,所以我们需要把str类型转换为bytes。

    str1 ='Thank you for connecting'	str1 = str1.encode()	str2 ='Go away!'	str2 = str2.encode()	str3 ='1'	str3 = str3.encode()
  7. 继续循环,进行判断,依据接收数据判断返回数据。

    if buf == str3:    	connection.send(str1)    else:    	connection.send(str2)	connection.close()s.close()

2.基于TCP协议的模拟客户端访问服务端

  1. 引入socket库和time库。

    import socketimport time
  2. 设置socket,主机和端口,并将主机名和端口绑定在一起确定发送目标。

    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)host = socket.gethostname()port = 1234s.connect((host, port))
  3. 转换类型,由于Python 3 的新规定,发送的必须是bytes类型,所以我们需要把str类型转换为bytes。

    str01 = '1'str01 = str01.encode()
  4. 设置发送睡眠间隔时间

    time.sleep(1)
  5. 发送数据,并将接收的数据打印出来。

    s.send(str01)print (s.recv(1024))s.close()

效果演示:

  1. 启动服务端,并开始接收数据。
    socket库实践
  2. 启动客户端,并发送数据。
    socket库实践
  3. 可以看到返回数据和接收数据都是成功的,并且此时服务端依然还在运行。
    socket库实践

3.基于UDP协议的模拟服务端

  1. 大部分和基于TCP的一样,但是要注意,UDP不需要三次握手,所以不需要listen和accept,也要注意发送数据的类型是bytes。
    #coding:utf-8import sockets = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)host = socket.gethostname()port = 1234s.bind((host, port))while True:	recv,client_addr = s.recvfrom(1024)	if not recv:    	break	print('[Client %s:%s said]:%s' % (client_addr[0],client_addr[1],recv))	str1 ='tcpServer has received your message'	str1 = str1.encode()	s.sendto(str1,client_addr)

4.2.基于UDP协议的模拟客户端访问服务端

  1. 大部分和基于TCP的一样,但是要注意,UDP不需要三次握手,所以不需要listen和accept,也要注意发送数据的类型是bytes。

    import socketimport times = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)host = socket.gethostname()port = 1234s.connect((host, port))str01 = '1'str01 = str01.encode()time.sleep(1)s.send(str01)print (s.recv(1024))s.close()

效果演示:

  1. 启动服务端,并开始接收数据。
    socket库实践
  2. 启动客户端,并发送数据。
    socket库实践
  3. 服务端也接收到客户端的数据了。

socket库实践

转载地址:http://abazi.baihongyu.com/

你可能感兴趣的文章
window.event对象用法讲解
查看>>
jive license保护原理
查看>>
java des加密
查看>>
struts&hibernate&spring例子
查看>>
inno使用教程
查看>>
网吧系统母盘制作(系统分区整体考虑优化配置篇)
查看>>
spring beans beanfactory applicationcontext
查看>>
使用ORM工具进行数据访问
查看>>
使用ORM工具进行数据访问
查看>>
Quartz 使用手记 --转
查看>>
编译与部署Eclipse+Tomcat+MySQL+Liferay4.1.2
查看>>
MySQL用户授权
查看>>
mysql忘记密码怎么办?~
查看>>
MySQL修改密码方法总结
查看>>
怎么将我的硬盘屏蔽
查看>>
关于MySQL select into 和 SQLServer select into
查看>>
2003应用
查看>>
文件上传组件比较
查看>>
关于MySQL select into 和 SQLServer select into
查看>>
搭建开发环境(初学liferay必看)
查看>>