Python socket 编程初探

socket是两个应用程序进行通信的管道,这两个应用程序可以在同一台机器上,也可以位于两台不同的机器上,相同的网络或者不同网络之间的。Python socket有丰富的类和方法,可以简化socket编程。本文算是一个学习笔记。

二  socket

2.1 socket类型

socket.AF_UNIX 

 

只能够用于单一的Unix系统进程间通信

 

socket.AF_INET 

 

服务器之间网络通信

 

socket.AF_INET6 

 

用于IPv6网络的通信

 

socket.SOCK_STREAM

 

流式socket , for TCP

 

socket.SOCK_DGRAM 

 

数据报式socket , for UDP

 

socket.SOCK_RAW

 

原始套接字,普通的套接字无法处理ICMPIGMP等网络报文,而SOCK_RAW可以;其次,SOCK_RAW也可以处理特殊的IPv4报文;此外,利用原始套接字,可以通过IP_HDRINCL套接字选项由用户构造IP头。

 

socket.SOCK_SEQPACKET 

 

可靠的连续数据包服务

 

例子
 创建TCP Socket:
 import socket
 tcpSerSock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
创建UDP Socket:
tcpSerSock=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

注意点:
1)TCP发送数据时,已建立好TCP连接,所以不需要指定地址。UDP是面向无连接的,每次发送要指定是发给谁。
2)服务端与客户端不能直接发送列表,元组,字典。需要字符串化repr(data)。
2.2 socket函数

服务端socket函数

socket.bind(address)   

 

将套接字绑定到地址, AF_INET,以元组(host,port)的形式表示地址.

 

socket.listen(backlog)

 

开始监听TCP传入连接。backlog指定在拒绝连接之前,操作系统可以挂起的最大连接数量。该值至少为1

 

socket.accept()

 

接受TCP连接并返回(conn,address,其中conn是新的套接字对象,可以用来接收和发送数据。address是连接客户端的地址。

 

客户端socket函数

socket.connect(address) 

 

连接到address处的套接字。一般address的格式为元组(hostname,port),如果连接出错,返回socket.error错误。

 

socket.connect_ex(adddress)

 

功能与connect(address)相同,但是成功返回0,失败返回errno的值。

 

公用函数

socket.recv(bufsize[,flag])

 

接受TCP套接字的数据。数据以字符串形式返回,bufsize指定要接收的最大数据量。flag提供有关消息的其他信息,通常可以忽略。

 

socket.send(string[,flag]) 

 

发送TCP数据。将string中的数据发送到连接的套接字。返回值是要发送的字节数量,该数量可能小于string的字节大小。

 

socket.sendall(string[,flag])

 

完整发送TCP数据。将string中的数据发送到连接的套接字,但在返回之前会尝试发送所有数据。成功返回None,失败则抛出异常。

 

socket.recvfrom(bufsize[.flag])

 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/2b42b70376b3950b5064243cf17aa228.html