https---这个是协议。 www.164.com --域名也就是网路IP地址的别名
12/23534343.html --- 这个是资源相对路径 page=1&count=10 访问时传入的参数
是基于tcp协议来传输的,传输前要建立连接。http协议规定了数据的具体格式
http协议规定了浏览器与web服务器通信数据的格式。
a. GET---获取服务器数据
b.POST---向服务器提交数据
a. GET--的格式 请求行,请求头,空行
b. POST--的格式 请求行,请求头,空行,请求体
请求行---的组成: 请求方式,请求资源路径,http协议版本
响应行, 响应头 ,空行, 响应体
状态码信息: 200 服务器成功处理请求, 400 错误的请求,地址或参数错误
404 资源不存在 500 服务器内部代码出现错误
利用开发者工具:谷歌浏览器,按F12 调出开发者工具,或者“在网页右击选择检查”
开发者工具是查看网页布局和JS代码调试的利器
通过Network标签选项可以查看每一次请求和响应的通信过程。
进入终端,在命令行模式下,进入资源所在目录,运行python -m http.server 8000
8000是设置的端口号(不设置的话,默认也是8000). 之后 浏览器输入 http://localhost/index.html就能显示了
每个运行的网络程序都会有个端口,要给程序发数据就要找到对应的端口。每个端口都对应一个端口号,通过端口号就可以找到端口。端口号有65536个。
通信流程就是,通过ip地址找到设备,通过端口号找到对应程序的端口,通过端口与程序交流数据
端口分两类:一类是系统占用的,1-1023不可以用(比如21分给ftp, 25分给smtp,80分给http)。其他是动态的,可以使用(如果程序没有指定,系统会动态的指定一个),程序退出,端口号就会释放。
为了测试,服务器端可以使用“网络调试助手”工具,这里获取 http://链接:https://pan.baidu.com/s/11MDA1oa953xmhgB8B81M9g?pwd=love 提取码:love
import socket if __name__ == '__main__': # socket.AF_INET代办ipv4, socket.SOCK_STREAM代表tcp通讯方式 tcp_client_socket= socket.socket(socket.AF_INET,socket.SOCK_STREAM) tcp_client_socket.connect(("192.168.56.1",8080)) #由于传输的是字节流,所以字符串要编码encode,接收到数据也要解码decode tcp_client_socket.send("hello world".encode(encoding='utf-8')) recv_data = tcp_client_socket.recv(1024) print(recv_data.decode(encoding='utf-8')) tcp_client_socket.close()
步骤: 1 创建一个socket,2 绑定地址 (IP和端口号) 3 设置监听 4等待客户端连接
5 接受数据 6 发送数据 7 关闭连接
import socket if __name__ == '__main__': #ser_socket只负责监听 ser_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #绑定IP地址和端口号,不写ip地址,就是默认本机IP地址 ser_socket.bind(("",8888)) #服务端可以等待排队连接的最大数量128 ser_socket.listen(128) #阻塞等待,接受连接后,返回一个用以和客户端通讯的socket和客户端地址 conn_socket,ip_port = ser_socket.accept() print("客户端地址",ip_port) recv_data = conn_socket.recv(1024) print('接收到的数据:',recv_data.decode(encoding='utf-8')) conn_socket.send('你的数据我收到了'.encode('utf-8')) conn_socket.close() ser_socket.close()
注意:当客户端套接字close,那么服务端的recv返回的数据长度就是0,会解除阻塞,反之也是一样
if __name__ == ''__main__'': #每个模块都内置一个"__name__"属性,表示该模块的名称。模块的执行有两种,一种是作为主程序执行,一种是被导入其他模块执行。这个语句的作用是,判断如果作为主程序执行,里面的代码就会执行,否则不执行
联系客服