python,twenty-seven day

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()
View Code

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()     #关闭客户套接字
View Code

获取文件(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()
View Code

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()
View Code

相互发送消息(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()
View Code

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()
View Code

群聊(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()
View Code

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()
View Code

猜你喜欢

转载自www.cnblogs.com/study-learning/p/9700007.html