我是靠谱客的博主 专一火龙果,最近开发中收集的这篇文章主要介绍菜鸟初学python入门进阶第九节:面向对象,socket编程1.HTTP、Socket、TCP2.socket和server实现通信3.socket实现聊天和多用户连接4.socket发送http请求,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
PYTHON socket编程
- 1.HTTP、Socket、TCP
- 2.socket和server实现通信
- 3.socket实现聊天和多用户连接
- 4.socket发送http请求
1.HTTP、Socket、TCP
由于http是单向的、如聊天室的就实现不了,我们需要一种新的协议,一种基于传输层的api,也就是socket
TCP协议之上提供了socket接口,TCP协议是可以双向传播的
2.socket和server实现通信
server端
import socket
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 网络,协议
server.bind(('0.0.0.0', 8000))# 服务器
server.listen()
# 返回一个socket对象和对应绑定的用户地址
sock, addr = server.accept()
# 一次从客户端获取1kb数据,data是byte类型
data = sock.recv(1024)
# utf8方式解码成字符串
print(data.decode("utf8"))
# 获得新字符串,utf8方式编码成byte类型
sock.send("recv {}".format(data.decode('utf8')).encode('utf8'))
server.close()
sock.close()
client端
import socket
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 网络,协议
client.connect(('127.0.0.1', 8000))
client.send('dk'.encode('utf8'))
data = client.recv(1024)
print(data.decode('utf8'))
client.close()
先运行server,再运行client
3.socket实现聊天和多用户连接
server端
import socket
import threading
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 网络,协议
server.bind(('0.0.0.0', 8000))# 服务器
server.listen()
def handle_socket(sock, addr):
while True:
# 一次从客户端获取1kb数据,data是byte类型
data = sock.recv(1024)
if data.decode('utf8') == 'im out':
break
# utf8方式解码成字符串
print(data.decode("utf8"))
# 获得新字符串,utf8方式编码成byte类型
re_data = input()
sock.send("recv {}nadd {}".format(data.decode('utf8'), re_data).encode('utf8'))
print('one guy out')
sock.close()
while True:
print('in accepting')
# 返回一个socket对象和对应绑定的用户地址
sock, addr = server.accept()
client_thread = threading.Thread(target=handle_socket, args=(sock, addr))
client_thread.start()
client端
import socket
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 网络,协议
client.connect(('127.0.0.1', 8000))
while True:
request = input()
if request == 'im out':
break
client.send(request.encode('utf8'))
data = client.recv(1024)
print(data.decode('utf8'))
client.close()
4.socket发送http请求
平常用的requests库基于python的urllib,urllib基于socket
import socket
from urllib.parse import urlparse
'''parse用来解析url'''
def get_url(url):
'''通过socket请求url'''
url = urlparse(url)
host = url.netloc
path = url.path
if path == '':
path = '/'
'''建立socket连接'''
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect((host, 80))
client.send("GET {} HTTP/1.1rnHost:{}rnConnection:closernrn".format(path, host).encode('utf8'))
data = b''
while True:
d = client.recv(1024)
if d:
data += d
else:
break
data = data.decode('utf8')
print(data)
client.close()
if __name__ == '__main__':
get_url('http://www.baidu.com')
最后
以上就是专一火龙果为你收集整理的菜鸟初学python入门进阶第九节:面向对象,socket编程1.HTTP、Socket、TCP2.socket和server实现通信3.socket实现聊天和多用户连接4.socket发送http请求的全部内容,希望文章能够帮你解决菜鸟初学python入门进阶第九节:面向对象,socket编程1.HTTP、Socket、TCP2.socket和server实现通信3.socket实现聊天和多用户连接4.socket发送http请求所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复