C/S架构
C/S即:Client和Server,中文意思:客户端与服务器架构,这种架构也是从用户层面(也可以是物理层面)来划分的。
B/S架构
B/S即:Browser与Server,中文意思:浏览器端与服务器端架构,这样架构是从用户层面来划分的。
套接字(socket)
server端
import socket sk = socket.socket() #设置准备 sk.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) #放在bind前面,防止端口未正确关闭而被占用而导致报错 sk.bind(('127.0.0.1',8989)) #把地址绑定到套接字 sk.listen() #监听链接 while True: try: coon,addr = sk.accept() #接受客户端链接,阻塞 while True: msg = input('>>>') coon.send(msg.encode('utf-8')) #向客户端发送信息 if msg == 'q':break msg = coon.recv(1024) #接受客户端信息 if msg == b'q':break print(msg.decode('utf-8')) #打印客户端信息 conn.close() except UnicodeDecodeError: pass sk.close()
client端
import socket sk = socket.socket() #创建客户套接字 sk.connect(('127.0.0.1',8989)) #尝试连接服务器 while True: msg = sk.recv(1024) #对话(发送/接收) if msg == b'q':break print(msg.decode('utf-8')) #打印传过来的话 re_msg = input('>>>') sk.send(re_msg.encode('utf-8')) if re_msg == 'q':break sk.close() #关闭客户套接字
获取文件(TCP协议的socket)
server
import socket sk = socket.socket() sk.bind(('127.0.0.1',8080)) sk.listen() conn,addr = sk.accept() filename = conn.recv(1024) print('-->filename :',filename) with open(filename,'wb') as f: content = conn.recv(4096) f.write(content) print(content.decode('utf-8')) conn.close() sk.close()
client
import time import socket sk = socket.socket() sk.connect(('127.0.0.1',8080)) sk.send('1.内容回顾.py'.encode('utf-8')) time.sleep(0.1) with open(r'D:\code\day31-40\day36.网络编程基础\1.内容回顾.py',encoding='utf-8') as f: content = f.read() print('len : ',len(content)) sk.send(content.encode('utf-8')) sk.close()
相互发送消息(UPD协议的socket)
server
import socket sk = socket.socket(type=socket.SOCK_DGRAM) sk.bind(('127.0.0.1',9000)) msg,addr = sk.recvfrom(1024) print(msg.decode('utf-8')) print(addr) sk.sendto('再见'.encode('utf-8'),addr) sk.close()
client
import socket sk = socket.socket(type=socket.SOCK_DGRAM) sk.sendto('你好'.encode('utf-8'),('127.0.0.1',9000)) mag,addr = sk.recvfrom(1024) print(mag.decode('utf-8')) print('server addr :',addr) sk.close()
群聊(UPD协议的socket)
server
import socket sk = socket.socket(type=socket.SOCK_DGRAM) sk.bind(('127.0.0.1',9000)) while True: msg,addr = sk.recvfrom(1024) print(addr , msg.decode('utf-8')) msg_send = input('>>>') sk.sendto(msg_send.encode('utf-8'),addr) sk.close()
client
import socket sk = socket.socket(type = socket.SOCK_DGRAM) while True: msg_send = input('>>>') sk.sendto(msg_send.encode('utf-8'),('127.0.0.1',9000)) msg,addr = sk.recvfrom(1024) print(msg.decode('utf-8')) print('server addr :',addr) sk.close()