美文网首页
基于python的网络编程

基于python的网络编程

作者: 飞鸟无声 | 来源:发表于2016-12-17 16:38 被阅读0次

    1.套接字

    两个端点的程序之间的“信息通道”。程序可能分布在不同的计算机上(通过网络连接),通过套接字相互发送信息。

    套接字包括两个:服务器套接字和客户机套接字。在创建一个服务器套接字后,让它等待连接。这样它就在某个网络地址处(IP地址和一个端口的组合)监听,直到有客户端套接字连接。连接完成后两者就可以进行交互了。

    2.socket模块(套接字)

    服务器端的通信过程和客服端通信过程:

    socket  => blind => listen => accpect => send =>secv => close

    服务器端套接字函数:

    s.bind() 绑定地址(主机,端口号对)到套接字

    s.listen() 开始 TCP 监听

    s.accept() 被动接受 TCP 客户的连接,(阻塞式)等待连接的到来

    客户端套接字函数:

    s.connect() 主动初始化 TCP 服务器连接

    s.connect_ex() connect()函数的扩展版本,出错时返回

    出错码,而不是抛异常

    公共用途的套接字函数:

    s.recv() 接收 TCP 数据

    s.send() 发送 TCP 数据

    s.sendall() 完整发送 TCP 数据

    s.recvfrom() 接收 UDP 数据

    s.sendto() 发送 UDP 数据

    s.getpeername() 连接到当前套接字的远端的地址

    s.getsockname() 当前套接字的地址

    s.getsockopt() 返回指定套接字的参数

    s.setsockopt() 设置指定套接字的参数

    s.close() 关闭套接字

    3.socket()模块函数

    socket()模块函数语法如下:

    socket(socket_famliy,socket_type,protocol=0)

    socket_family 可以是 AF_UNIX 或 AF_INET。socket_type可以是 SOCK_STREAM 或SOCK_DGRAM。protocol 一般不填,默认值为 0。

    套接字地址:主机与端口

    合法的端口号范围为 0 到 65535。其中,小于 1024 的端口号为系统保留端口。在 Unix 操作系统,保留的端口号(及其对应的服务/协议和套接字类型)可以通过/etc/services文件获得。

    常用端口号列表可以从下面这个网站获得:

    http://www.iana.org/assignments/port-numbers

    4.socket()模块函数 --创建套接字

    创建一个 TCP/IP 的套接字,调用 socket.socket():

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

    创建TCP套接字时类型只能是SOCK_STREAM。

    创建一个 UDP/IP 的套接字:

    udpSocket=socket.socket(socket.AF_UNIX,socket.SOCK_DGRAM)

    创建UDP套接字是类型只能是SOCK_DGRAM。

    5.创建一个 TCP 服务器:

    创建一个通用的 TCP 服务器的伪代码:

    ss = socket() # 创建服务器套接字

    ss.bind() # 把地址绑定到套接字上

    ss.listen() # 监听连接

    inf_loop: # 服务器无限循环

    cs = ss.accept() # 接受客户的连接

    comm_loop: # 通讯循环

    cs.recv()/cs.send() # 对话(接收与发送)

    cs.close() # 关闭客户套接字

    ss.close() # 关闭服务器套接字(可选)

    TCP 时间戳服务器:

    创建一个 TCP 服务器程序,这个程序会把客户发送过来的字符串加上一个时间戳(格式:'[时间]数据')返回给客户。

    创建一个通用的 TCP 客户端的伪代码:

    cs = socket() # 创建客户套接字

    cs.connect() # 尝试连接服务器

    comm_loop: # 通讯循环

    cs.send()/cs.recv() # 对话(发送/接收

    cs.close() # 关闭客户套接字

    创建一个 UDP 服务器:

    由于 UDP 服务器不是面向连接的,所以直接等待进来的连接就好了。创建一个能接收客户的消息,在消息前加一个时间戳后返回的 UDP 服务器。伪代码:

    ss = socket() # 创建一个服务器套接字

    ss.bind() # 绑定服务器套接字

    inf_loop: # 服务器无限循环

    cs = ss.recvfrom()/ss.sendto() # 对话(接收与发送)

    ss.close() # 关闭服务器套接字

    UDP 客户端伪代码如下:

    cs = socket() # 创建客户套接字

    comm_loop: # 通讯循环

    cs.sendto()/cs.recvfrom() # 对话(发送/接收)

    cs.close() # 关闭客户套接字

    相关文章

      网友评论

          本文标题:基于python的网络编程

          本文链接:https://www.haomeiwen.com/subject/yrjwmttx.html