Contents

[Python]Python版socket十行模板

以下的socket
都是python实现的服务端接受客户端键盘输入的信息,改为大写返回客户端的模板
都是同步、阻塞
都会在数据长度大于1024时产生错误,请自己写协议
端口都是8080,请确保未被占用

tcp_server.py

6行控制监听的最大tcp链接数。
tcp是有链接的。9行建立链接,10行接受数据,11行发送数据,12行关闭链接。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
    import socket

    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    server.bind(("0.0.0.0", 8080))
    server.listen(1)

    while True:
        conn, addr = server.accept()
        data_from_client = conn.recv(1024).decode('utf8')
        conn.sendall(data_from_client.upper().encode('utf8'))
        conn.close()

tcp_client.py

5行链接,6行发送数据,7行接收数据,9行关闭链接。

1
2
3
4
5
6
7
8
9
    import socket

    while True:
        client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        client.connect(("0.0.0.0", 8080))
        client.sendall(input().encode('utf8'))
        data_from_server = client.recv(1024).decode('utf8')
        print('GET ' + data_from_server)
        client.close()

udp_server.py

8行收,10行发。
需要注意的是,发送时的地址写收数据时得到的地址。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
    import socket

    SERVER_ADDR =  ("0.0.0.0", 8080)
    server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    server.bind(SERVER_ADDR)

    while True:
        data, client_addr = server.recvfrom(1024)
        sending = data.decode('utf8').upper()
        server.sendto(sending.encode('utf8'), client_addr)

udp_client.py

7行发,8行收。

1
2
3
4
5
6
7
8
9
    import socket

    server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    SERVER_ADDR =  ("0.0.0.0", 8080)

    while True:
        server.sendto(input().encode('utf8'), SERVER_ADDR)
        data, addr = server.recvfrom(1024)
        print('GET', data.decode('utf8'))