python网络编程

来源:互联网 发布:海康sadp软件使用说明 编辑:程序博客网 时间:2024/05/29 21:17

网络通信是计算机之间的进程之间的通信。

Socket又称"套接字"是网络编程的一个抽象概念。应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。


TCP编程:TCP连接创建是双向通道,客户端与服务端都可以给对方发送数据。
创建TCP连接时,主动发起连接的叫客户端,被动响应连接的叫服务端。

创建一个TCP的Socket连接:
用socket(family,type)创建套接字获得socket对象。
family一般有两种AF_INET(默认)与AF_INET6 。type:SOCK_STREAM(默认)面向连接。SOCK_DGRAM面向非连接

s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

建立连接
s.connect((IP地址,端口号))

其中,AF_INET表示的是指定使用IPv4协议,IPv6为AF_INET6。SOCK_STREAM指定使用面向刘的TCP协议。
当客户端发起连接时,除了IP地址外,还需要端口号。某一些服务的端口号有一些标准。如,80分配给Web服务作为标准端口(HTTP的端口),21分配给FTP服务作为标准端口,25分配给SMTP服务作为标准端口(简单邮件传输协议)。端口号从0到1023,这些端口号一般固定分配给一些服务。端口号从1024到65535,这些端口号一般不固定分配给某个服务,许多服务都可以使用这些端口。


socket对象的一些方法:

服务端套接字:

bind()  将套接字绑定到地址。 在AF_INET下,以元组(IP,port)的形式表示地址listen([backlog])  开始TCP监听。backlog指定最多可以监听的链接数量。值至少为1。accept()  函数用于面向连接的套接字类型。accept()将从连接请求队列中获得连接信息(客户端地址),创建新的套接字,并返回该套接字的描述符。accept返回的是一个新套接字描述符,客户端可以通过这个描述符和服务器通信,而最初通过socket创建的套接字描述符依然用于监听客户端请求。

客户端套接字:

connect(address)  将套接字连接到远程地址。地址形式为(IP,port)。如果连接出错,返回socket.error错误。connect_ex( )  类似于connect() 出错时返回出错码,而不是抛出异常

客户端服务端共有的方法:

recv([buffersize],[flag])  从套接字接收TCP数据。buffersize指定要接收的最大数据量。当没有数据可用,阻塞,直到至少有一个字节是可用的或者远程端被关闭。当远程端被关闭并且所有数据被读取完毕时,返回空字符串。recv_into(buffer,[nbytes,[flags]])  将数据存储到缓冲区中,而不是创建一个新的字符串。从套接字接收缓冲区字节。如果没有指定buffersize或buffersize为0,则接收缓冲区最大可容字节数。send(data,[flags])  向套接字发送TCP数据。将String中的数据发送到连接的套接字。返回要发送的字节数量(可能小于len(data))。sendall(data,[flags])  向套接字发送TCP数据。会重复调用send(),直到发送完所有数据。如果发生错误,无法判断已经发送了多少数据。发送成功返回None。recvform(buffersize,[flags])  接收UDP数据,与recv()类似,但返回值是(data,address)。其中data是包含接收数据的字符串,address是发送数据的套接字地址。recvfrom_into(buffer,[nbytes],[flags])  类似于recv_into(),但也返回发送端的地址信息。sendto(data,[flag],address)  向套接字发送UDP数据,类似于send(),但该方法允许指定目的地址(形式为(IP,port))。返回值是发送的字节数。close()  关闭套接字。getpeername()  返回连接套接字的远程地址。返回值为通常为元组形式(IP,port)getsockname()  返回套接字本地地址。返回值为通常为元组形式(IP,port)setsockopt(level,optname,value)  设置套接字选项的值。value可以是整数或字符串getsockopt(level,optname[buffersize])  返回套接字选项的值。如果给定了非零的buffersize参数,返回值是该长度的字符串。否则为整数。settimeout([timeout])  设置套接字操作的超时,timeout是一个浮点数,单位是秒。值为None表示禁用超时等效于setblocking(1)。timeout为0等效于setblock(0)。一般,超时期应该在刚创建套接字时设置,因为它们可能用于连接的操作(如connect())gettimeout()  返回当前超时值,单位是秒,如果没有设置超时,则返回None。fileno()  返回套接字的文件描述符。setblocking([flags])  如果flag为0/False,则将套接字设为非阻塞模式,否则将套接字设为阻塞模式(默认值True/None)。非阻塞模式下,如果调用recv()没有发现任何数据,或send()调用无法立即发送数据,那么将引起socket.error异常。makefile()  创建一个与该套接字相关连的文件shutdown(flag)  关闭套接字的读取端(flag==SHUT_RD)、套接字的写入端(flag==SHUT_WR)或者两端(flag==SHUT_RDWR)share()  与另一个进程共享套接字。必须提供目标进程的id,并且将生成的字节对象传递给目标进程。这里的共享套接字实例可以通过调用socket.fromshare()获得。detach()  关闭套接字对象但不关闭底层文件描述符。该方法被调用后无法使用套接字对象,但文件描述符可以用于其它用途。返回文件描述符。


服务器端工作流程:
(1)使用socket()创建socket
(2)使用bind()把创建的socket绑定到指定TCP端口
(3)调用listen()使socket处于监听状态。(监听其它客户端的连接)
(4)客户端发送请求后,调用accept()接受客户端请求,建立连接
(5)与客户端发送或接收数据
(6)通信完毕,关闭socket

客户端工作流程:
(1)使用socket()创建socket
(2)调用connect()向服务器端socket发起连接
(3)建立连接后,进行数据读写
(4)通信完毕,关闭socket

0 0
原创粉丝点击