Python网络编程

1. SocketServer 模块

https://www.jianshu.com/p/cb0758f872c6
TCPServer:https://blog.csdn.net/qq_23937195/article/details/71104378

2. Socket服务器模块

import socket  
  
HOST='192.168.1.60'  
PORT=55555  
  
s = socket.socket()  
s.bind((HOST,PORT))  
s.listen(10)  
while True:  
    conn,addres = s.accept()  
    conn.send('HELLO')  
    while True:  
        data = conn.recv(1024)  
        print data,addres  
        if data =='exit':  
            print 'byebye'  
            break  
        if not data.strip():  
            continue  
        flag = True  
        while flag:  
            info = raw_input('Answer:>>')  
            if info.strip():  
                flag=False  
        conn.sendall(' %s' % info)  
    conn.close()  
  • 主要是创建一个服务端,在创建服务端的时候,主要步骤如下:
    创建socket对象socket——》绑定IP地址和端口bind——》监听listen——》得到请求accept——》接收请求recv——》发送信息send——》关闭close

3. Scoket 客户端模块

import socket  
  
HOST='192.168.1.60'  
PORT=55555  
  
s = socket.socket()  
s.connect((HOST,PORT))  
while True:  
    data = s.recv(1024)  
    if  data.strip():  
        print 'Replay is ',data  
        flag = True  
        while flag:  
            kel = raw_input('Question :>>')  
            print 'raw_input values : %r' % kel  
            if kel.strip():  
                flag=False  
        s.sendall(kel)  
        if kel == 'exit':  
            break  
s.close()  
  • 客户端代码就是连接服务器,接收和发送消息,具体流程如下:
    创建socket对象socket——》connet连接服务器——》获取消息recv——》发送消息send——关闭close

基本方法

  • Python网络编程_第1张图片
  • Python网络编程_第2张图片
  • Python网络编程_第3张图片

4. UDP服务器

from socketserver import BaseRequestHandler, UDPServer
import time

class TimeHandler(BaseRequestHandler):
    def handle(self):
        print('Got connection from', self.client_address)
        # Get message and client socket
        msg, sock = self.request
        resp = time.ctime()
        sock.sendto(resp.encode('ascii'), self.client_address)

if __name__ == '__main__':
    serv = UDPServer(('', 20000), TimeHandler)
    serv.serve_forever()

>>> from socket import socket, AF_INET, SOCK_DGRAM
>>> s = socket(AF_INET, SOCK_DGRAM)
>>> s.sendto(b'', ('localhost', 20000))
0
>>> s.recvfrom(8192)
(b'Wed Aug 15 20:35:08 2012', ('127.0.0.1', 20000))
  • 一个典型的UDP服务器接收到达的数据报(消息)和客户端地址。如果服务器需要做应答, 它要给客户端回发一个数据报。对于数据报的传送, 你应该使用socket的 sendto() 和 recvfrom() 方法。 尽管传统的 send() 和 recv() 也可以达到同样的效果, 但是前面的两个方法对于UDP连接而言更普遍.


    Python网络编程_第4张图片

5. 远程方法调用(RPC)

  • 远程调用就是将对象名、函数名、参数等传递给远程服务器,服务器将处理结果返回给客户端。

使用Python的multiprocessing.connections实现远程方法调用(RPC):https://blog.csdn.net/tab_space/article/details/52858565

6. hamc模块

使用hmac模块生成加入了密钥的消息摘要:https://blog.csdn.net/jy692405180/article/details/78636767

你可能感兴趣的:(Python网络编程)