python网络编程01、网络编程基础 -- socket编程

 

 

01、socket编程:说明一下这里一般部署一个客户一个服务器

--在socket编程中主要是socket_server 和 socket_client编程两个部分
    --一个服务器 一个客户端

02、socket 介绍

--server由于不知道client什么时候会发来请求,因此必须时时刻刻处于等待状态

--爬虫就是一个显而易见的客户端 client

--socket_server时时处于监听状态,这里监听的配置包括:协议  ip  端口
    --协议:这里可以选择tcp udp等都可以
    --IP:有的时候为了保证安全,只允许本地进行访问
    --端口:对于任何一个app都必须使用特定的端口,否则访问者无法接入服务器

 03、初步实现client  和  server对话

import socket

"""
    1、记住这里必须在发送之前将数据编码为byte,收到数据之后需要将数据解码为字符串或对应的数据
"""

# socket 通信服务端初始化:网络类型 协议类型
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 监听地址端口
server.bind(('0.0.0.0', 8000))
server.listen()
sock, addr = server.accept()

# 获取从客户端获取的数据
# 一次获取1kb数据
data = sock.recv(1024)
print(data.decode('utf8'))

# 接收到消息之后返回一个相应给客户端
sock.send('hello {}'.format(data.decode('utf8')).encode('utf8'))

# 关闭服务和链接
server.close()
sock.close()
import socket


# socket 通信客户端
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('127.0.0.1', 8000))

# 发数据给服务器
client.send('bobby'.encode('utf8'))

# 接收服务器响应
data = client.recv(1024)
print(data.decode('utf8'))

client.close()

04、socket实现聊天  ----  单个用户连接客户端,这里server  和  client各启动一次

--server

--代码如下:
import socket

"""
    1、记住这里必须在发送之前将数据编码为byte,收到数据之后需要将数据解码为字符串或对应的数据
"""

# socket 通信服务端初始化:网络类型 协议类型
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 监听地址端口
server.bind(('0.0.0.0', 8000))
server.listen()
sock, addr = server.accept()

"""
    2、这里通过while True实现聊天的不中断
"""
while True:
    # 获取从客户端获取的数据
    # 一次获取1kb数据
    data = sock.recv(1024)
    if data.decode('utf8') == 'close':  # 这里不一定非要关闭服务器,一般是关闭客户端
        break
    print(data.decode('utf8'))

    # 接收到消息之后返回一个相应给客户端
    re_data = input()
    sock.send(re_data.encode('utf8'))


# 关闭服务和链接
server.close()
sock.close()
--client

--代码如下:
import socket


# socket 通信客户端
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('127.0.0.1', 8000))

while True:
    # 发数据给服务器
    re_data = input()
    client.send(re_data.encode('utf8'))
    if re_data.encode('utf8') == 'close':
        break

    # 接收服务器响应
    data = client.recv(1024)
    print(data.decode('utf8'))

client.close()

05、多个用户连接客户端  ----  这里server启动一次,client启动多个

--server启动

import socket
import threading

"""
    1、记住这里必须在发送之前将数据编码为byte,收到数据之后需要将数据解码为字符串或对应的数据
"""

# socket 通信服务端初始化:网络类型 协议类型
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 监听地址端口
server.bind(('0.0.0.0', 8000))
server.listen()

"""
    2、这里通过while True实现聊天的不中断
    3、通过多线程实现同时连接多个用户
"""
def handle_sock(sock, addr):
    while True:
        # 获取从客户端获取的数据,一次1kb
        data = sock.recv(1024)
        if data.decode('utf8') == 'close':  # 这里不一定非要关闭服务器,一般是关闭客户端
            break
        print(data.decode('utf8'))

        # 接收到消息之后返回一个相应给客户端
        re_data = input()
        sock.send(re_data.encode('utf8'))

while True:
    sock, addr = server.accept()

    # 使用线程处理新接手的连接
    client_thread = threading.Thread(target=handle_sock, args=(sock, addr))
    client_thread.start()


# 关闭服务和链接
server.close()
sock.close()
--客户端启动

import socket


# socket 通信客户端
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('127.0.0.1', 8000))

while True:
    # 发数据给服务器
    re_data = input()
    client.send(re_data.encode('utf8'))
    if re_data.encode('utf8') == 'close':
        break

    # 接收服务器响应
    data = client.recv(1024)
    print(data.decode('utf8'))

client.close()

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值