IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> python TCP编程 -> 正文阅读

[网络协议]python TCP编程

TCP

一般网络连接都是可靠的TCP连接,创建该连接时,将发起连接的称为客户端,而被动连接的叫服务端。

客户端

创建客户端连接

# 导入socket模块
import socket

# 创建一个socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接。参数是元组形式,包含域名和端口
s.connect(('xxx', prot))

创建socket连接时的参数说明:

  • socket.AF_INET说明遵循IPV4协议,如要使用IPV6协议,将参数改为socket.AF_INET6
  • socket.SOCK_STREAM意为指定使用面向流的TCP协议

对端口的说明:

  • 80端口是web服务的标准端口
  • 25端口是STMP服务的标准端口
  • 端口号小于1024的是internet端口,大于1024的可以任意使用。

发送请求

建立连接之后,就可以发送请求。

s.send('xxxx')

发送的文本格式必须符合HTTP标准。
发送完之后就可以等待服务器返回内容了。

接收返回内容

buffer=[]
while True:
    d = s.recv(1024)
    if d:
        buffer.append(d)
    else:
        break
data = ''.join(buffer)

接收返回的内容时,需要用recv(max)来限制接收数据的字节数,然后在while循环中,反复接收,直到接收到的数据为空,跳出循环。

关闭连接

s.close()

服务端

服务端编程要比客户端编程更复杂。

# 首先依旧是创建socket
import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

绑定端口,监听来自其他客户端的连接。

# .bind()方法,绑定端口和网络地址
s.bind(('ip', prot))
  • 0.0.0.0可绑定到所有的网络地址。
  • 127.0.0.1可绑定本机地址,如绑定该IP,只有本机的客户端能连接到服务端。
  • 小于1024端口需要管理员权限才能绑定。

调用s.listen(n)方法来监听连接。

# 设置最大等待连接数量为5
s.listen(5)
print('Waiting for connectiong......)

接受客户端的连接

while True:
    # 接收一个新连接
    sock, addr = s.accept()
    # 建立线程来处理连接
    t = threading.Threading(target=tcplink, args=(sock, addr))
    t.start()


def tcplink(sock, addr)print('Accept new connection from %s:%s...'% addr)
    # 连接建立后,先发送一条问候信息
    sock.send('Welcome!')
    while True:
        data = sock.recv(1024)
        # 如果接收的请求是空的或者为exit,就断开连接
        if not data or data.decode('utf-8') == 'exit':
            break
        sock.send(('Hello, %s!' % data.decode('utf-8')).encode('utf-8'))
    sock.close()        
  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-10-17 13:08:02  更:2022-10-17 13:11:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 20:49:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码