当前位置: 首页 > 编程笔记 >

python网络编程学习笔记(五):socket的一些补充

帅银龙
2023-03-14
本文向大家介绍python网络编程学习笔记(五):socket的一些补充,包括了python网络编程学习笔记(五):socket的一些补充的使用技巧和注意事项,需要的朋友参考一下

1、半开放socket

利用shutdown()函数使socket双向数据传输变为单向数据传输。shutdown()需要一个单独的参数,该参数表示了如何关闭socket。具体为:0表示禁止将来读;1
表示禁止将来写;2表示禁止将来读和写。

2、timeouts控制超时

调用socket的settimeout()函数,向其传递参数,表明超时时间设置。当访问一个socket,如果经过了参数设定的时间后,什么都没有发生,则会产生一个socket.timeout异常
例如:当程序运行后,会等待数据传入。在另一终端,利用telnet连接12345端口。连接成功后,显示“连接来自:****”,如果此时5秒内,终端未进行输入,系
统会提示连接超时退出。

代码如下:

# -*- coding: cp936 -*-
##tcp响应服务器
import socket,traceback
host=''
port=12345
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
s.bind((host,port))
s.listen(1)

while 1:     try:         clientsock,clientaddr=s.accept()     except KeyboardInterrupt:         raise     except:         traceback.print_exc()         continue     clientsock.settimeout(5)     try:         print "连接来自:",clientsock.getpeername()         while 1:             data=clientsock.recv(4096)             if not len(data):                 break             clientsock.sendall(data)             clientsock.sendall("\nI get it!\n") ##            t=raw_input('input the word:') ##            clientsock.sendall(t)     except (KeyboardInterrupt,SystemExit):         raise     except socket.timeout:         print '连接超时'         pass     except:         traceback.print_exc()

    try:         clientsock.close()     except KeyboardInterrupt:         raise     except:         traceback.print_exc()

3、理解网络字节顺序

不同的平台有不同的二进制数据编码方法,为了解决这一总是,一种标准的二进制数据表示法,称为网络字节顺序。在发送一个二进制整数之前,该整数首先被
转换成网络字节顺序。接收方收到后,在使用该数据之前,会先把网络字节顺序转换成本地的表示方法。
python的struct模块提供了把数据在python和二进制数据之间转换的支持。
主要的两种基本格式:
H:适用于16位整数
I:适用于32位整数
惊叹号表示struct模块使用网络字节顺序来进行编码和解码。其它的格式见下表:

Character

Byte order

Size and alignment

@

native

native            凑够4个字节

=

native

standard        按原字节数

<

little-endian

standard        按原字节数

>

big-endian

standard       按原字节数

!

network (= big-endian)

standard       按原字节数


常用语句:

struct.pack(fmt,v1,v2,...)将v1,v2按参数格式进行转换。参数fmt是格式字符
串,这里主要是!I。v1,v2,...表示要转换的python值。
struct.unpack(fmt,string)与pack刚好相反。
例如:

>>> import struct
>>> a=20
>>> str=struct.pack("!I",a)
>>> print repr(str)
'\x00\x00\x00\x14'
>>> print struct.unpack("!I",str)
(20,)

 类似资料:
  • 本文向大家介绍python网络编程学习笔记(三):socket网络服务器,包括了python网络编程学习笔记(三):socket网络服务器的使用技巧和注意事项,需要的朋友参考一下 1、TCP连接的建立方法 客户端在建立一个TCP连接时一般需要两步,而服务器的这个过程需要四步,具体见下面的比较。 步骤 TCP客户端 TCP服务器 第一步 建立socket对象  建立socket对象 第二步 调用co

  • 本文向大家介绍python网络编程学习笔记(二):socket建立网络客户端,包括了python网络编程学习笔记(二):socket建立网络客户端的使用技巧和注意事项,需要的朋友参考一下 1、建立socket 建立socket对象需要搞清通信类型和协议家族。通信类型指明了用什么协议来传输数据。协议的例子包括IPv4、IPv6、IPX\SPX、AFP。对于internet通信,通信类型基本上都是AF

  • 本文向大家介绍python网络编程学习笔记(七):HTML和XHTML解析(HTMLParser、BeautifulSoup),包括了python网络编程学习笔记(七):HTML和XHTML解析(HTMLParser、BeautifulSoup)的使用技巧和注意事项,需要的朋友参考一下 一、利用HTMLParser进行网页解析 具体HTMLParser官方文档可参考http://docs.pyth

  • 本文向大家介绍python网络编程学习笔记(八):XML生成与解析(DOM、ElementTree),包括了python网络编程学习笔记(八):XML生成与解析(DOM、ElementTree)的使用技巧和注意事项,需要的朋友参考一下 xml.dom篇     DOM是Document Object Model的简称,XML 文档的高级树型表示。该模型并非只针对 Python,而是一种普通XML

  • 什么是 Socket Socket(套接字):是在网络上运行两个程序之间的双向通信链路的一个端点。socket绑定到一个端口号,使得 TCP 层可以标识数据最终要被发送到哪个应用程序。 正常情况下,一台服务器在特定计算机上运行,​​并具有被绑定到特定端口号的 socket。服务器只是等待,并监听用于客户发起的连接请求的 socket 。 在客户端:客户端知道服务器所运行的主机名称以及服务器正在侦听

  • 这一小节我们介绍Powershell中的Socket编程,网络编程是所有语言中绕不开的核心点,下面我们通过对代码的分析来让大家对PS中的Socket有一个初步的了解。 Scoket-Tcp编程 开始之前我们先想想为什么要学习socket编程,那么最直观的是端口扫描,那么还有可能是反弹shell之类的应用。进行Socket编程只需要调用.Net框架即可,这里先使用TCP来示例: 这里是去打开一个TC