一、网络 计算机网络是一门课程,内容包括网络协议/网络模型/操作系统实现/网络应用开发等等。网络应用起初是http静态网页、而后兴起smtp/pop3邮件、telnet聊天、udp聊天,一直到现在的动态网页、websocket长连接等等。在每一个阶段也催生出不同的大公司。 1、socket套接字是操作系统里网络部分的概念,在所有的开发语言中,都有这个模块或功能。 2、ip地址 ipv4/ipv6两个版本,其实ipv6在20年前就有,没有实现的原因大概是ipv4的地址分配由美国主导,或者其他原因。
二、网络层
这是基本的操作系统中针对网络所作的分层,
三、几个协议 TCP(Transmission Control Protocol)可靠的、面向连接的协议(eg:打电话)、传输效率低全双工通信(发送缓存&接收缓存)、面向字节流。使用TCP的应用:Web浏览器;电子邮件、文件传输程序。 UDP(User Datagram Protocol)不可靠的、无连接的服务,传输效率高(发送前时延小),一对一、一对多、多对一、多对多、面向报文,尽最大努力服务,无拥塞控制。使用UDP的应用:域名系统 (DNS);视频流;IP语音(VoIP)。
HTTP(HyperText Transfer Protocol,超文本传输协议),是对tcp协议的封装。
四、应用的结构
1、C/S结构:Client与Server ,中文意思:客户端与服务器端架构,这种架构也是从用户层面(也可以是物理层面)来划分的。
2、Browser与Server,中文意思:浏览器端与服务器端架构,这种架构是从用户层面来划分的。
四、Python中使用
1、 socket方式创建服务器
使用 socket 模块的 socket 函数来创建一个 socket 对象。socket 对象可以通过调用其他函数来设置一个 socket 服务。
socket.socket([family[, type[, proto]]])
import socket import sys # 创建 socket 对象 serversocket = socket.socket( socket.AF_INET, socket.SOCK_STREAM) # 获取本地主机名 host = socket.gethostname() port = 9001 # 绑定端口号 serversocket.bind((host, port)) # 设置最大连接数,超过后排队 serversocket.listen(5) while True: # 建立客户端连接 clientsocket,addr = serversocket.accept() print("连接地址: %s" % str(addr)) msg='欢迎访问菜鸟教程!'+ "\r\n" clientsocket.send(msg.encode('utf-8')) clientsocket.close()
客户端代码:
import socket import sys # 创建 socket 对象 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 获取本地主机名 host = socket.gethostname() # 设置端口号 port = 9001 # 连接服务,指定主机和端口 s.connect((host, port)) # 接收小于 1024 字节的数据 msg = s.recv(1024) s.close() print (msg.decode('utf-8'))
2、创建tcp服务器 server.py
from socket import * import time COD = 'utf-8' HOST = '192.168.164.141' # 主机ip PORT = 21566 # 软件端口号 BUFSIZ = 1024 ADDR = (HOST, PORT) SIZE = 10 tcpS = socket(AF_INET, SOCK_STREAM) # 创建socket对象 tcpS.setsockopt(SOL_SOCKET,SO_REUSEADDR,1) #加入socket配置,重用ip和端口 tcpS.bind(ADDR) # 绑定ip端口号 tcpS.listen(SIZE) # 设置最大链接数 while True: print("服务器启动,监听客户端链接") conn, addr = tcpS.accept() print("链接的客户端", addr) while True: try: data = conn.recv(BUFSIZ) # 读取已链接客户的发送的消息 except Exception: print("断开的客户端", addr) break print("客户端发送的内容:",data.decode(COD)) if not data: break msg = time.strftime("%Y-%m-%d %X") #获取结构化事件戳 msg1 = '[%s]:%s' % (msg, data.decode(COD)) conn.send(msg1.encode(COD)) #发送消息给已链接客户端 conn.close() #关闭客户端链接 tcpS.closel()
client.py
from socket import * from time import ctime HOST = '192.168.164.141' #服务端ip PORT = 21566 #服务端端口号 BUFSIZ = 1024 ADDR = (HOST, PORT) tcpCliSock = socket(AF_INET, SOCK_STREAM) #创建socket对象 tcpCliSock.connect(ADDR) #连接服务器 while True: data = input('>>').strip() if not data: break tcpCliSock.send(data.encode('utf-8')) #发送消息 data = tcpCliSock.recv(BUFSIZ) #读取消息 if not data: break print(data.decode('utf-8')) tcpCliSock.close() #关闭客户端
下一课,tornado框架
查看更多关于Python学习第二十三课(网络编程)的详细内容...