网站服务器天付,泰州网站制作维护,信息化建设 网站建设等方面,大一期末网页设计作业最近一直在学习网络编程#xff0c;今天把 socket部分做一个总结。
Python 的socket库可以实现不同协议不同地址的发包和收包#xff0c;无奈资料很少#xff0c;官方例子有限#xff0c;大神博客很少提及#xff0c; 经过一番尝试后#xff0c;总结以下几点用法以便大家…最近一直在学习网络编程今天把 socket部分做一个总结。
Python 的socket库可以实现不同协议不同地址的发包和收包无奈资料很少官方例子有限大神博客很少提及 经过一番尝试后总结以下几点用法以便大家以后使用。
client端
import socket
import time
import random
import string# 定义一些常量变量名可以变。自己好记就行
buffer 1024 # 发送缓冲区大小这里是1KB
data_size 128 # 每个UDP数据包的大小
bandwidth 1 # 目标带宽1 Mbps
PACKETS_PER_SECOND bandwidth * 1024 * 1024 / (8 * data_size) # 计算每秒需要发送的数据包数量# 目标服务器的IP和端口
SERVER_IP 127.0.0.1 # 请替换为实际服务器IP
SERVER_PORT 1245 # 请替换为实际端口def generate_random_data(size):生成随机数据生成往UDP包中放的随机值return .join(random.choice(string.ascii_letters string.digits) for _ in range(size)).encode()def udp_main():# 创建UDP套接字client_socket socket.socket(socket.AF_INET, socket.SOCK_DGRAM)print(fStarting UDP bandwidth test to {SERVER_IP}:{SERVER_PORT} aiming for {bandwidth} Mbps...)start_time time.time()packets_sent 0try:while True:# 生成随机数据data generate_random_data(data_size)# 发送数据包client_socket.sendto(data, (SERVER_IP, SERVER_PORT))#包计数packets_sent 1# 控制发送速率以达到目标带宽elapsed_time time.time() - start_timeif elapsed_time 1:#实际带宽怎么算需要记一下actual_bandwidth (packets_sent * data_size * 8) / (elapsed_time * 1024 * 1024)print(fActual bandwidth: {actual_bandwidth:.2f} Mbps)#重新计算包packets_sent 0start_time time.time()time.sleep(1 / PACKETS_PER_SECOND) # 等待控制发送频率except KeyboardInterrupt:print(\nBandwidth test interrupted by user.)finally:client_socket.close()def tcp_main():client_socket socket.socket(socket.AF_INET,socket.SOCK_STREAM)client_socket.connect((SERVER_IP, SERVER_PORT))start_time time.time()packets_sent 0try:while True:data generate_random_data(data_size)client_socket.send(data)packets_sent 1elapsed_time time.time() - start_timeif elapsed_time 1:client_socket.send(q.encode())packets_sent 0start_time time.time()acutalwidth (packets_sent * data_size * 8) / (elapsed_time * 1024 * 1024)print(fActual bandwidth: {acutalwidth:.2f} Mbps)time.sleep(1/PACKETS_PER_SECOND)except KeyboardInterrupt:print(\nBandwidth test interrupted by user.)finally:client_socket.close()if __name__ __main__:tcp_main(server端
import socketdef Server_Socket():serverip 0.0.0.0serverport 8080#1、2 创建UDP的socketserver_socket socket.socket(socket.AF_INET,socket.SOCK_DGRAM)server_socket.bind((serverip,serverport))print(fudp server {serverip}:{serverport})try:while True:#3、接收客户端发来的值data,addr server_socket.recvfrom(1024)print(frecv from {addr}:{data.decode(utf-8)}) #print的内容不用背except KeyboardInterrupt:print(^C received, shutting down the server) #无所谓不用背具体详情finally:server_socket.close()def TCP_socket():serverip 127.0.0.1serverport 1245server_socket socket.socket(socket.AF_INET,socket.SOCK_STREAM)server_socket.bind((serverip,serverport))print(fstart listening:)server_socket.listen(1024)print(ftcp socket: {serverip}:{serverport})try:dataconn,addr server_socket.accept()print(fclient{dataconn}:{addr})while True:data dataconn.recv(1024)print(frecv from {addr},recv data:{data.decode(utf-8)})if data.decode(utf-8) q:breakdataconn.send(已送达.encode(utf-8))except KeyboardInterrupt:print(^C received, shutting down the server)finally:server_socket.close()if __name__ __main__:TCP_socket()