程序流程

1.一台客户机从其标准输入(键盘)读入一行字符,并通过其套接字将该行发送到服务器。

2.服务器从其连接套接字读取一行字符。

3.服务器将该行字符转换成大写。

4.服务器将修改后的字符串(行)通过连接套接字再发回给客户机。

5.客户机从其套接字中读取修改后的行,然后将该行在其标准输出(监视器)上打印出来。

 

【TCP】服务器端代码:


import socket
import time
import threading

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #创建socket (AF_INET:IPv4, AF_INET6:IPv6) (SOCK_STREAM:面向流的TCP协议)

s.bind(('127.0.0.1', 10021)) #绑定本机IP和任意端口(>1024)

s.listen(1) #监听,等待连接的最大数目为1

print('Server is running...')

def TCP(sock, addr): #TCP服务器端处理逻辑

print('Accept new connection from %s:%s.' %addr) #接受新的连接请求

while True:
data = sock.recv(1024) #接受其数据
time.sleep(1) #延迟
if not data or data.decode() == 'quit': #如果数据为空或者'quit',则退出
break
sock.send(data.decode('utf-8').upper().encode()) #发送变成大写后的数据,需先解码,再按utf-8编码, encode()其实就是encode('utf-8')

sock.close() #关闭连接
print('Connection from %s:%s closed.' %addr)

while True:

sock, addr = s.accept() #接收一个新连接
TCP(sock, addr) #处理连接


【TCP】客户端代码:

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #创建一个socket

s.connect(('127.0.0.1', 10021)) #建立连接

while True: #接受多次数据

data = input('请输入要发送的数据:') #接收数据

if data == 'quit': #如果为'quit',则退出
break

s.send(data.encode()) #发送编码后的数据

print(s.recv(1024).decode('utf-8')) #打印接收到的大写数据

s.send(b'quit') #放弃连接

s.close() #关闭socket


运行结果:

Python TCP和UDP编程例子_数据

 

UDP协议则不需要事先建立连接,直接互相发送数据即可。

【UDP】服务器端代码:

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) #创建一个socket,SOCK_DGRAM表示UDP

s.bind(('127.0.0.1', 10021)) #绑定IP地址及端口

print('Bound UDP on 10021...')

while True:
data, addr = s.recvfrom(1024) #获得数据和客户端的地址与端口,一次最大接收1024字节
print('Received from %s:%s.' % addr)
s.sendto(data.decode('utf-8').upper().encode(), addr)#将数据变成大写送回客户端

#不关闭socket


 

【UDP】客户端代码:

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

addr = ('127.0.0.1', 10021) #服务器端地址

while True:
data = input('请输入要处理的数据:') #获得数据
if not data or data == 'quit':
break
s.sendto(data.encode(), addr) #发送到服务端
recvdata, addr = s.recvfrom(1024) #接收服务器端发来的数据
print(recvdata.decode('utf-8')) #解码打印

s.close() #关闭socket


 

运行结果:

Python TCP和UDP编程例子_UDP_02