Python之旅.第八章网络编程
一、基于TCP协议的套接字通信(无并发效果)
#阻塞: 程序停住了
服务端:
import socket
server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server.bind(('127.0.0.1',8080))
server.listen(5) # listen接收客户端发来的连接请求
while True:
conn,client_addr=server.accept()
print(client_addr)
while True:
try:
data=conn.recv(1024)
if not data:break # 针对linux系统
conn.send(data.upper())
except ConnectionResetError: #linux系统在单方面关闭连接时不会报ConnectionResetError(windows系统),会receive空
break
conn.close()
server.close()
客户端:
import socket
client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
client.connect(('127.0.0.1',8080))
while True:
msg=input('>>>: ').strip()
if not msg:continue
client.send(msg.encode('utf-8'))
data=client.recv(1024)
print(data.decode('utf-8'))
client.close()
二、基于UDP协议通信的套接字
TCP(流式协议):可靠性高。会因为网络原因丢包,但只有在一端收到另一端发来的ack确认信息才会将信息在内存中删除,如果发现丢包(一段时间内没有回复)会将信息再发一份。TCP会存在粘包问题,收与发可以不是对应的。必须先启动服务端,否则报错。
UDP(数据包协议):可靠性低。信息一旦发出即在内存中删除,如果发生丢包,信息即丢失。UDP效率高速度快的主要原因,一是因为不建连接,二是因为接受后不会确认。 UDP没有粘包问题,收与发一一对应。 如果发hello,但收一个字符,在windows系统中会报错;在linunx系统中不报错,只接收h。
并行:(真正意义上的)同时运行;并行属于并发
并发: 看起来是同时运行就可以了
服务端:
import socket
server=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) # 数据报协议
server.bind(('127.0.0.1',8080))
while True:
client_data,client_addr=server.recvfrom(1024)
#保持UDP稳定(丢包少)的最大接受字节为512,所以这里一般设为1024
print(client_data)
msg=input('回复%s:%s>>>:' %(client_addr[0],client_addr[1]))
server.sendto(msg.encode('utf-8'),client_addr)
客户端:
import socket
client=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) # 数据报协议
while True:
msg=input('>>>: ').strip()
client.sendto(msg.encode('utf-8'),('127.0.0.1',8080))
res,server_addr=client.recvfrom(1024)
print(res.decode('utf-8'))
#因为UDP不需提前建连接,不用等到一个客户端退出后另一个才能交互;几个客户端都可以和服务端交互。服务端还是一个个服务,但因为处理速度快,会给用户一种并发的感觉。
URL地址: http://www.cnblogs.com/linhaifeng/articles/6817679.html
http: #浏览器(客户端套接字)使用的协议
www.cnblogs.com #域名
www.cnblogs.com:80 #省略:80,80为端口,一般服务端端口默认为80
linhaifeng/articles/6817679.html #路径
DHCP服务器: 每台电脑自带的,用来配IP,其端口默认67
DNS服务器: 每台电脑自带的, 用来将域名转成IP,其默认端口53
用浏览器访问某个URL,本质是连接服务器,将其上的文件打开并下载到本地
a、 浏览器客户端套接字 –– UDP –– DNS服务端套接字,将域名解析成IP返回
b、 浏览器客户端套接字 –– TCP –– Web服务端套接字,将文件下载到本地
常用服务器软件:nginx,httpd
DNS查询为迭代查询
一般会现在本地DNS查找,如果找不到会在同级DNS查找,若还找不到需要从根DNS服务器逐级问下来(迭代查询);后续解释本地DNS代劳。
. #跟域名 #13个跟服务器(美9日1欧3),受限于UDP稳定性
com #顶级域名
cnblogs #二级域名 #二级域名需去顶级域名中买
www #二级域名的主机名