1、C/S B/S模型
client-----server
browser-----server
其中服务端必须具备:
1、稳定运行,对外一直提供服务
2、绑定一个固定的Ipod+port
2、互联网:
2.1 物理连接介质
2.2 互联网协议(互联网协议即计算机界的英语)
3、tcp协议:三次握手
半连接池backlog=5
限制的同一时刻的讲求数而非连接数
四次挥手断开连接
基于tcp协议的套接字通信(简单版)
-------------------------------服务器端-----------------------------------
import socket # 导入socket模块
# 1、买手机
phone=socket.socket(socket.AF_INFT,socket.SOCK_STREAM) # tcp称为流式协议,udp称为数据报协议SOCK_DGRAM
print(phone)
# 2、插入/绑定手机卡
#phone.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) # 遇到服务务端存在四次挥手的time_wait状态下占用地址下使用这条命令可解决,需要加在bind上方
phone.bind((127.0.0.1,8080)) # 固定ip+port,需要客户端与之对应
# 3、开机
phone.listen(5) # 半连接池,限制的是请求数
# 4、等待电话连接
print('start....')
whilet True:: # 连接循环
conn,client_addr=phone.accept() #(三次握手建立的双向连接,(客户端的ip,端口))
print('已经有一个连接建立成功',client_addr)
# 5、通信:收\发消息
while True: # 通信循环
try:
print('服务端正在收数据...')
data=conn.recv(1024) # 最大接收的字节数,没有数据会在原地一直等待收,即发送者发送的数据量必须>0bytes
# print('===>')
if len(data) == 0:break # 在客户端单方面断开连接,服务端才会出现收空数据的情况
print('来自客户端的数据',data)
conn.send(data.upper())
except ConnectionResetError:
break
# 6、挂掉电话连接
conn.close()
# 7、关机
phone.close()
--------------------------------客户端 --------------------------------
import socket
# 1、买手机
phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
print(phone)
# 2、拨电话
phone.connect(('127.0.0.1',8080)) # 指定服务端ip和端口
# 3、通信:发\收消息
phone.send('hello'.encode('utf-8'))
# phone.send(bytes('hello',encoding='utf-8'))
data=phone.recv(1024)
print(data)
# import time
# time.sleep(500)
# 4、关闭
phone.close()
基于tcp协议的套接字通信(循环版)
-----------------------------------服务端-----------------------------------
import socket
# 1、买手机
phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #tcp称为流式协议,udp称为数据报协议SOCK_DGRAM
# print(phone)
# 2、插入/绑定手机卡
# phone.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
phone.bind(('127.0.0.1',8080))
# 3、开机
phone.listen(5) # 半连接池,限制的是请求数
# 4、等待电话连接
print('start....')
while True: # 连接循环
conn,client_addr=phone.accept() #(三次握手建立的双向连接,(客户端的ip,端口))
# print(conn)
print('已经有一个连接建立成功',client_addr)
# 5、通信:收\发消息
while True: # 通信循环
try:
print('服务端正在收数据...')
data=conn.recv(1024) #最大接收的字节数,没有数据会在原地一直等待收,即发送者发送的数据量必须>0bytes
# print('===>')
if len(data) == 0:break #在客户端单方面断开连接,服务端才会出现收空数据的情况
print('来自客户端的数据',data)
conn.send(data.upper())
except ConnectionResetError:
break
# 6、挂掉电话连接
conn.close()
# 7、关机
phone.close()
-----------------------------------客户端-----------------------------------
import socket
# 1、买手机
phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# print(phone)
# 2、拨电话
phone.connect(('127.0.0.1',8080)) # 指定服务端ip和端口
# 3、通信:发\收消息
while True: # 通信循环
msg=input('>>: ').strip()
phone.send(msg.encode('utf-8'))
data=phone.recv(1024)
print(data)
# 4、关闭
phone.close()
# 可多加几个客户端并同时开始运行就形成客户端循环运行