Python 网络编程 TCP/UDP

1 TCP编程

示例:服务端接收客户端发来的字符串,并加上hello发回去。

socket_server.py

import socket, threading, time

# 创建一个基于IPV4和TCP协议的socket
ss = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 监听端口
ss.bind(('127.0.0.1', 5555))
ss.listen(5)  # 等待连接最大数量为5
print('waiting for connection...')


def tcplink(sock, addr):
    print('accept new connection from %s:%s...' % addr)
    sock.send(b'welcome!')
    while True:
        data = sock.recv(1024)
        time.sleep(1)
        if not data or data.decode('utf-8') == 'exit':
            break
        sock.send(('hello,%s!' % data.decode('utf-8')).encode('utf-8'))
    sock.close()
    print('connection from %s:%s closed.' % addr)


while True:
    # 接受一个新连接
    sock, addr = ss.accept()
    # 创建新线程来处理TCP连接
    t = threading.Thread(target=tcplink, args=(sock, addr))
    t.start()

socket_client.py

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 建立连接
s.connect(('127.0.0.1', 5555))
# 接受信息
print(s.recv(1024).decode('utf-8'))
for data in [b'lisi', b'zhangsan', b'wanger']:
    # 发生数据
    s.send(data)
    print(s.recv(1024).decode('utf-8'))
s.send(b'exit')
s.close()

2 UDP编程

udp_server.py

import socket

ss = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 绑定端口
ss.bind(('127.0.0.1', 6666))

print('bind udp on 6666')

while True:
    # 接收数据
    data, addr = ss.recvfrom(1024)
    print('received from %s:%s' % addr)
    ss.sendto(b'hello,%s' % data, addr)

udp_client.py

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
for data in [b'lisi', b'zhangsna', b'wanger']:
    # 发送数据
    s.sendto(data, ('127.0.0.1', 6666))
    # 接收数据
    print(s.recv(1024).decode('utf-8'))

s.close()

猜你喜欢

转载自blog.csdn.net/lihaogn/article/details/81287512