一、Python-Socket编程

1.1、弄懂HTTP、Socket、TCP这几个概念

  什么是HTTP协议?浏览器的本质就是一个socket客户端遵循HTTP协议,HTTP协议的本质:通过\r\n分割的规范+请求响应之后断开连接。HTTP协议是建立在tcp之上的,HTTP是一种规范,它规定了发送数据的数据格式,这个数据格式是通过\r\n进行分割的,请求头与请求体也是通过2个\r\n分割的。响应的时候,响应头与响应体也是通过\r\n分割,并且规定了请求已响应就会断开连接,是一种短连接,无状态。

  什么是socketsocket是应用层与tcp/ip协议族通信的中间软件的抽象层,他是一组接口。在设计模式中,socket其实就是一个门面模式,他把复杂的TCP/IP协议族隐藏在socket接口后面,对用户来说一组接口就是全部。

  什么是TCP?TCP三次握手,四次挥手的流程。三次握手:1客户端先向服务器发送SYN状态码,告诉服务器想要建立连接。2然后服务端向客户端回复ACK+SYN状态码告诉客户端可以连接。3然后客户端回复确认ACK状态码给服务器,建立连接。四次挥手:1客户端向服务器发送FIN+SEQ状态码,告诉服务器想要断开。2然后服务器向客户端回复ACK+SEQ状态码,服务器此时进入close-wait状态,等待连接通道数据传输完毕,传输完毕后。3然后服务器向客户端发送FIN+SEQ状态码,此时服务器进入最后确认状态。4最后客户端向服务器发送ACK+SEQ状态码,服务器接收到后立即进入close状态,连接断开。

socket套接字抽象层接口:

1.2、socket和server实现通信

import socket

server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)#协议
server.bind(('0.0.0.0', 8000)) #地址,端口
server.listen(10) #监听socket客户端请求
sock, addr = server.accept() #阻塞等待连接请求
#获取从客户端发送的数据
#一次获取1k的数据
data = sock.recv(1024)
print(data.decode("utf8"))
re_data = input() #输入发送给客户端的消息
sock.send(re_data.encode("utf8"))
sock.close() #关闭连接
server.close() #关闭服务器

socket_server

import socket
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) client.connect(('127.0.0.1', 8000)) #连接服务端
client.send("lishuntao".encode("utf8"))
data = client.recv(1024)
print (data.decode("utf8"))
client.close()

socket_client

1.3、socket实现聊天和多用户连接

socket_server:

import socket
import threading backlog = 10
server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server.bind(('0.0.0.0', 8000))
server.listen(backlog) def handle_sock(sock, addr):
while True:
data = sock.recv(1024)
if data.decode("utf8") == "Q" or data.decode("utf8") == "q":
break
print(data.decode("utf8"))
re_data = input()
sock.send(re_data.encode("utf8"))
sock.close()
server.close() while True:
sock, addr = server.accept() #用线程去处理新接收的连接(用户)
client_thread = threading.Thread(target=handle_sock, args=(sock, addr))
client_thread.start()

socket_client:

import socket
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
client.connect(('127.0.0.1', 8000))
while True:
re_data = input()
if re_data.upper() == "Q":
break
client.send(re_data.encode("utf8"))
data = client.recv(1024)
print(data.decode("utf8"))
client.close()

1.4、socket模拟http请求

#requests(封装了urlib) -> urlib(封装了socket) -> socket(封装TCP/UDP协议)
import socket
from urllib.parse import urlparse def get_url(url):
#通过socket请求html
url = urlparse(url)
host = url.netloc
path = url.path
if path == "":
path = "/" #建立socket连接
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# client.setblocking(False)
client.connect((host, 80)) #阻塞不会消耗cpu #不停的询问连接是否建立好, 需要while循环不停的去检查状态
#做计算任务或者再次发起其他的连接请求 client.send("GET {} HTTP/1.1\r\nHost:{}\r\nConnection:close\r\n\r\n".format(path, host).encode("utf8")) data = b""
while True:
d = client.recv(1024)
if d:
data += d
else:
break data = data.decode("utf8")
html_data = data.split("\r\n\r\n")[1]
print(html_data)
client.close() if __name__ == "__main__":
url = "https://www.baidu.com/"
get_url(url)

09-Python-Socket编程的更多相关文章

  1. Python Socket 编程——聊天室示例程序

    上一篇 我们学习了简单的 Python TCP Socket 编程,通过分别写服务端和客户端的代码了解基本的 Python Socket 编程模型.本文再通过一个例子来加强一下对 Socket 编程的 ...

  2. python/socket编程之粘包

    python/socket编程之粘包 粘包 只有TCP有粘包现象,UDP永远不会粘包. 首先需要掌握一个socket收发消息的原理 发送端可以是1k,1k的发送数据而接受端的应用程序可以2k,2k的提 ...

  3. PYTHON SOCKET编程简介

    原文地址: PYTHON SOCKET编程详细介绍   Python 提供了两个基本的 socket 模块. 第一个是 Socket,它提供了标准的 BSD Sockets API. 第二个是 Soc ...

  4. python socket编程笔记

    用python实现一个简单的socket网络聊天通讯 (Linux --py2.7平台与windows--py3.6平台) 人生苦短之我用Python篇(socket编程) python之路 sock ...

  5. [Python_7] Python Socket 编程

    0. 说明 Python Socket 编程 1. TCP 协议 [TCP Server] 通过 netstat -ano 查看端口是否开启 # -*-coding:utf-8-*- "&q ...

  6. Python Socket 编程示例 Echo Server

    简评:我们已经从「Python Socket 编程概览」了解了 socket API 的概述以及客户端和服务器的通信方式,接下来让我们创建第一个客户端和服务器,我们将从一个简单的实现开始,服务器将简单 ...

  7. Python Socket 编程——聊天室演示样例程序

    上一篇 我们学习了简单的 Python TCP Socket 编程,通过分别写服务端和client的代码了解主要的 Python Socket 编程模型.本文再通过一个样例来加强一下对 Socket ...

  8. python socket编程入门(编写server实例)+send 与sendall的区别与使用方法

    python 编写server的步骤: 1. 第一步是创建socket对象.调用socket构造函数.如: socket = socket.socket( family, type ) family参 ...

  9. 第九章:Python高级编程-Python socket编程

    第九章:Python高级编程-Python socket编程 Python3高级核心技术97讲 笔记 9.1 弄懂HTTP.Socket.TCP这几个概念 Socket为我们封装好了协议 9.2 cl ...

  10. python socket编程详细介绍

    Python 提供了两个基本的 socket 模块. 第一个是 Socket,它提供了标准的 BSD Sockets API. 第二个是 SocketServer, 它提供了服务器中心类,可以简化网络 ...

随机推荐

  1. Selenium +Chrome浏览器如何模拟手机操作

    Selenium +Chrome浏览器如何模拟手机操作 进入手机模式 打开谷歌浏览器,按F12,进入开发者模式,点击Toggle device toolbar,进入手机模式 设置Chrome的手机模式 ...

  2. 易初大数据 2019年11月13日 Linux 王庆超

    ★安装Red Hat Enterprise Linux7.41 ◆1通过键盘的方向键选择“lnstall Red Hat Enterprise Linux7.4”选项来直接安装Linux 系统. ◆2 ...

  3. mysql group by使用方法注意

    mysql group by使用方法注意 group by 后面只用能用having 不能加 where等域名

  4. VS2019打包WPF安装程序最新教程

    VS2019打包WPF安装程序最新教程,使用Visual Studio 2019开发的WPF程序如果想要打包为安装程序,除了在VS2019找到WPF项目类库直接右键发布之外,更常用的还是将其打包为ex ...

  5. RabbitMQ 的高可用集群

    RabbitMQ 的高可用性 RabbitMQ 是比较有代表性的,因为是基于主从(非分布式)做高可用的 RabbitMQ 有三种模式:单机模式.普通集群模式.镜像集群模式. 单机模式 单机模式,生产几 ...

  6. [增强for循环] 格式

    比如:

  7. 这份最新Python面试精选问题你会几道?

    相信很多小伙伴学python以后都想进大厂,但是进大厂前你得了解些大厂面试题,可以在面试前复习下,以下是精选的5道python面试题: 第一. Python 的特点和优点是什么? Python 可以作 ...

  8. 微信小程序(mpvue) wx.openSetting 无法调起设置页面

    在开发过程有个需要保存图片/视频到设备相册的业务,so easy~   巴啦啦撸下来了完整功能, wx.saveVideoToPhotosAlbum 会自动调起用户授权,美滋滋~~   btu.... ...

  9. 力扣(LeetCode)寻找数组的中心索引 个人题解

    给定一个整数类型的数组 nums,请编写一个能够返回数组“中心索引”的方法. 我们是这样定义数组中心索引的:数组中心索引的左侧所有元素相加的和等于右侧所有元素相加的和. 如果数组不存在中心索引,那么我 ...

  10. hopper反汇编工具的逆向伪代码功能并不理想

    hopper的逆向代码功能并不如想象中那么好,尤其是在逆向c++代码时.对于从ObjC进入iOS开发又不太清楚运行时的人员来说,hopper可以将反汇编码输出成[obj selector:what]这 ...