我是靠谱客的博主 专一火龙果,最近开发中收集的这篇文章主要介绍菜鸟初学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请求所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(62)

评论列表共有 0 条评论

立即
投稿
返回
顶部