Large file uploads, exception handling, UDP communications, socketserver module

Large file uploads, exception handling, UDP communications, socketserver module

1, UDP communication basically using

1, socket socket introduced

import socket
server = socket.socket(type= socket.SOCK_DGRAM)
#type不写默认是TCP协议

Server:

2, UDP has no concept of a connection pool half (the listen), and no two-way channel, without having to accept, direct communication cycle

3, there are two reception data Return Value: server.recvfrom (1024)

data,addr = server.recvfrom(1024)
print(data)#客户端的消息
print(addr)#客户端的地址

Complete server:

import socket
server = socket.socket(type=socket.SOCK_DGRAM)
server.bind(('127.0.0.1',8080))

while True:
    data ,addr = server.recvfrom(1024)
    server.sendto(data.upper(),addr)

4, retransmission data: sendto

Client:

Without establishing a connection operation, direct access to the communication loop. However, to give a connection address , for transmitting

import socket
client = socket.socket(type=socket.SOCK_DGRAM)
server_address = ('127.0.0.1'.8080)
while True:
    client.sendto(b'hello',server_address)
    data,addr = client.recvfrom(1024)

Summed up the difference between UDP and TCP:

UDP is equivalent to send text messages; TCP equivalent to call

2, UDP and TCP four big difference

  1. UDP client allows hair empty : udp have a header

  2. udp protocol will not stick package:

    It will not stick package

    #客户端代码
    import socket
    client = socket.socket(type=socket.SOCK_DGRAM)
    
    server_address = ('127.0.0.1',8080)
    while True:
        client.sendto(b'hello',server_address)
        client.sendto(b'hello',server_address)
        client.sendto(b'hello',server_address)
    #服务端代码
    import socket
    
    server = socket.socket(type=socket.SOCK_DGRAM)
    server.bind(('127.0.0.1',8080))
    # while True:
    data ,addr = server.recvfrom(1024)
    print(data)
    data ,addr2 = server.recvfrom(1024)
    print(data)
    data ,addr3 = server.recvfrom(1024)
    print(data)
  3. The case of server disconnection, the client does not complain:

    We will always stay in the client's "type" that line. But if you continue to enter, it will error

    ConnectionResetError: [WinError 10054] 远程主机强迫关闭了一个现有的连接。

3, udp support concurrent: appears to be running simultaneously.

#服务端
import socket

server = socket.socket(type=socket.SOCK_DGRAM)
server.bind(('127.0.0.1',8080))

while True:
    data ,addr = server.recvfrom(1024)#在这里接受任何向这个地址发送消息的客户端。
    server.sendto(data.upper(),addr)

4, to achieve a simple version of the QQ

Client code

import socket

client = socket.socket(type=socket.SOCK_DGRAM)
server_address = (('127.0.0.1',8080))
while True:
    msg = input('>>>').encode('utf-8')
    msg = '来自客户端1的信息:%s'%msg
    client.sendto(msg.encode('utf-8'),server_address)
    data,addr = client.recvfrom(1024)
    print(data.decode('utf-8'))

Server code

import socket
server = socket.socket(type=socket.SOCK_DGRAM)
server.bind(('127.0.0.1',8080))
while True:
    data,addr = server.recvfrom(1024)#接收往这个地址放信息的任何客户端
    print(data.decode('utf-8'))
    msg = input('>>>')
    server.sendto(msg.encode('utf-8'),addr)

5, socketserver module

5.1 so that support concurrent TCP

#客户端代码
import socket

client = socket.socket()
client.connect(('127.0.0.1',8080))

while True:
    client.send(b'hello')
    data = client.recv(1024)
    print(data.decode('utf-8'))
#服务端代码
import socketserver
class MyServer(socketserver.BaseRequestHandler):
    def handle(self):
        # print('来啦 老弟')
        while True:
            data = self.request.recv(1024)
            print(self.client_address)  # 客户端地址
            print(data.decode('utf-8'))
            self.request.send(data.upper())

if __name__ == '__main__':
    """只要有客户端连接该地址  会自动交给自定义类中的handle方法去处理"""
    server = socketserver.ThreadingTCPServer(('127.0.0.1',8080),MyServer)  # 创建一个基于TCP的对象
    server.serve_forever()  # 启动该服务对象

5.2socketserver also supports UDP

#服务端代码
import socketserver

class MyServer(socketserver.BaseRequestHandler):
    def handle(self):
        # print('来啦 老弟')
        while True:
            data,sock = self.request
            print(self.client_address)  # 客户端地址
            print(data.decode('utf-8'))
            sock.sendto(data.upper(),self.client_address)
if __name__ == '__main__':
    """只要有客户端连接  会自动交给自定义类中的handle方法去处理"""
    server = socketserver.ThreadingUDPServer(('127.0.0.1',8080),MyServer)  # 创建一个基于TCP的对象
    server.serve_forever()  # 启动该服务对象
#客户端代码
import socket

client = socket.socket()
client.connect(('127.0.0.1',8080))

while True:
    client.send(b'hello')
    data = client.recv(1024)
    print(data.decode('utf-8'))

6, exception handling

1 What is abnormal?

Program error during operation, and no handling mechanism.

2 structural abnormalities

2.1 NameError

2.2SyntaError

Guess you like

Origin www.cnblogs.com/ZDQ1/p/11324014.html