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系统在单方面关闭连接时不会报ConnectionResetErrorwindows系统),会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.com80         #省略:8080为端口,一般服务端端口默认为80

linhaifeng/articles/6817679.html  #路径

 

DHCP服务器: 每台电脑自带的,用来配IP,其端口默认67

DNS服务器: 每台电脑自带的, 用来将域名转成IP,其默认端口53

 

用浏览器访问某个URL,本质是连接服务器,将其上的文件打开并下载到本地

a   浏览器客户端套接字 –– UDP –– DNS服务端套接字,将域名解析成IP返回

b   浏览器客户端套接字 –– TCP –– Web服务端套接字,将文件下载到本地

常用服务器软件:nginxhttpd

 

DNS查询为迭代查询

一般会现在本地DNS查找,如果找不到会在同级DNS查找,若还找不到需要从根DNS服务器逐级问下来(迭代查询);后续解释本地DNS代劳。

www.cnblogs.com.

.      #跟域名       #13个跟服务器(美913),受限于UDP稳定性

com   #顶级域名

cnblogs  #二级域名    #二级域名需去顶级域名中买

www    #二级域名的主机名

 

 

原文地址:https://www.cnblogs.com/yangli0504/p/8920691.html