网络编程
TCP编程
TCP协议提供可靠传输的服务,一种面向连接的通信方式。
在服务端,不断进行的步骤有:
- 创建Socket,绑定本地IP与端口;
- 监听
- 进入循环,不断接收客户端的连接请求;
- 接收传来的数据,发送给客户端数据;
- 关闭Socket;
在客户端,不断进行的步骤有:
- 创建Socket,连接服务端;
- 发送数据以及接收数据;
- 关闭Socket;
服务端:
# -*- coding: utf-8 -*-
import socket
import threading
import time
# 接收传来的数据并发送数据
def run_server(sock, addr):
print('接收来自 %s:%s 的连接...' % addr)
while True:
# 接收最大数据量大小为1024字节的数据
data = sock.recv(1024)
time.sleep(1)
if not data or data.decode('utf-8') == 'exit':
print('收到结束信息,即将关闭连接...')
break
print('接收到数据 %s' % data.decode('utf-8'))
# 服务端在收到数据之后发送确认信息
sock.send(('确认收到数据 %s' % data.decode('utf-8')).encode('utf-8'))
# 关闭socket
sock.close()
print('来自 %s:%s 的连接已经关闭...' % addr)
if __name__ == '__main__':
# 创建TCP Socket 并绑定IP与端口
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('127.0.0.1', 8088))
# 监听, 设置最大连接数量
s.listen(5)
print('正在准备连接...')
# 接收连接
sock, addr = s.accept()
# 创建线程处理连接
t = threading.Thread(target=run_server, args=(sock, addr))
t.start()
t.join()
print('线程结束...')
客户端
# -*- coding: utf-8 -*-
import socket
# 创建Socket并连接
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('127.0.0.1', 8088))
print('客户端已连接')
# 发送消息
s.send('wocao'.encode('utf-8'))
print('%s' % s.recv(1024).decode('utf-8'))
s.send('exit'.encode('utf-8'))
# 关闭socket
s.close()
UDP编程
UDP协议是不可靠的,一种面向无连接的协议。
在服务端的步骤:
- 创建Socket,绑定IP和端口;
- 接收数据和发送数据;
- 关闭Socket;
在客户端的步骤:
- 创建Socket;
- 发送数据和接收数据;
- 关闭Socket;
服务端:
# -*- coding: utf-8 -*-
import socket
# 创建socket并绑定
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
host = '127.0.0.1'
port = 8088
s.bind((host, port))
data, addr = s.recvfrom(1024)
print('从%s:%s中获取数据...' % addr)
print('接收到数据 %s' % data.decode('utf-8'))
客户端:
# -*- coding: utf-8 -*-
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
host = '127.0.0.1'
port = 8088
data = 'wocao'
s.sendto(data.encode('utf-8'), (host, port))
s.close()