一:客户端/服务器架构
即sc架构
1.硬件c/s架构 2.软件c/s架构
二:计算机网络架构 (在上一篇博客中有)
https://blog.youkuaiyun.com/gaoyishu91/article/details/80059455
三:socket
为什么有socket,因为在应用层中软件产生的数据,必须打包好,通过tcp传输给网络层,那么数据打包必须遵循tcp格式才行。socket可以给一个工具去简单的实现这一过程。
socket是应用层和tcp/ip协议族通信的中间软件抽象层,它是一组接口。让socket去组织数据,以符合指定的协议。
socket应该有一个服务端和一个应用端,服务端相当于服务器,应用端相当于一个个的软件。
服务端
import socket
ip_log = ('127.0.0.1',8080)
back_log = 5
buffer_size = 1024
phone = socket.socket(socket.AF_INET,SOCK_STREAM) #初始化工厂函数
phone.bind(ip_log) #套接字:IP地址 + 端口
#基于socket要写一个客户端和一个服务端 服务端需要放到网络之中 客户端需要分发给网络中
#如果客户端想要找到服务端 通过IP找到服务器在哪个网络中 IP地址中也包含mac地址,mac地址是世界唯一的 定位到了那台机器
#端口是定位这台机器的程序 socket服务端 所以IP+端口标识互联网中机器的程序地址
phone.listen(back_log) #开机,5代表最大backlog的数目
#TCP是基于双向链接进行通讯,每一次通讯需要双向链接,将建立链接的请求放入backlog中
conn,addr = phone.accept() #拿到一个元组 (conn.addr)
#addr 是客户端的地址
data = conn.recv(buffer_size = 1024) #收发消息是字节类型
conn.send(data)
conn.close()
phone.close
客户端:
import socket
ip_port = ('0.0.0.1',8080)
back_up = 5
buffer_size = 1024
phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #tcp
phone.connect(ip_log)
phone.send(data.encode('utf-8')) #bytes(data,encoding = 'utf-8')
phone.recv(buffer_size)
phone.close()
###########客户端和服务端循环收发消息###########
from socket import *
ip_port = ('127.0.0.1',8080)
back_log = 5
buffer_size = 1024
tcp_server = socket(AF_INET,SOCK_STREAM)
tcp.server = bind(ip_bind)
tcp_server.listen(back_log)
conn,addr = tcp.server.accept()
print('双向链接是',conn)
print('链接地址是',addr)
while TRUE: #(循环起来)
data = conn.recv(buffer_size)
print('客户端发来的消息是',data.decode('utf-8') #解码
conn.send(info.encode('utf-8'))
conn.close()
tcp_server.close()
from socket import *
ip_port = ('127.0.0.1',8080)
back_log = 5
buffer_size = 1024
tcp_client = socket(AF_INET,SOCK_STREAM)
tcp_client.connect(ip_log)
while TRUE: #(循环)
tcp_client.send('hello'.encode('utf-8'))
tcp_client.recv(data.decode('utf-8')) #收发只能是字节格式
tcp.client.close()