Python TCP编程简单实例

news2024/11/17 20:40:00

客户端:创建TCP链接时,主动发起连接的叫做客户端

服务端:接收客户端的连接

连接其他服务器

可以通过tcp连接其他服务器。

示例:

import socket

# 1.创建一个socket
# 参数1:指定协议 AF_INET(ipv4) 或 AF_INET6(ipv6)
# 参数2:SOCK_STREAM执行使用面向流的TCP
sk = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 建立连接
# 参数:是一个元组,第一个元素为要连接的服务器IP地址,第二个参数为端口
sk.connect(('网站域名', 80))

# 发送信息给服务端
sk.send(b'GET / HTTP/1.1\r\nHost: www.aixiashu.info\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:125.0) Gecko/20100101 Firefox/125.0\r\nConnection: close\r\n\r\n')

# 等待接收数据
data = []
while True:
    # 每次接收1k数据
    temData = sk.recv(1024)
    if temData:
        data.append(temData)
    else:
        # 接收完数据
        break
context = (b''.join(data)).decode('utf-8')

# 断开链接
sk.close()
print(context)

执行结果:

 

取出header头和html

示例:

head, html = context.split('\r\n\r\n', 1)
print('响应头:', head)
print('响应文本内容', html)

响应头在浏览器中会自动处理,不会显示在页面中。

执行结果:

 

客户端与服务器数据交互

服务端

示例:

import socket

# 创建一个socket
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定IP端口 使用自己本机ip,可通过命令行ipconfig查看获得
server.bind(('192.168.8.111', 8080))

# 监听
server.listen(3)
print('服务器启动。。。。。。')

# 等待客户端连接
clientSocket, clientAddress = server.accept()
print("%s -- %s 连接成功"%(str(clientSocket), clientAddress))

while True:
    data = clientSocket.recv(1024)
    print('收到'+str(clientSocket)+'的数据:'+data.decode('utf-8'))
    message = input('请输入发送给客户端内容:')
    clientSocket.send(message.encode('utf-8'))

 

客户端

示例:

import socket

client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('192.168.8.111', 8080))

while True:
    data = input('请输入发送内容:')
    client.send(data.encode('utf-8'))
    info = client.recv(1024)
    print('服务器:', info.decode('utf-8'))

执行结果:

注意:

停止可以先停止客户端。当前只是单线程,需要多线程才可以多客户端连接。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1684079.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TSMaster发送CAN报文

打开TSMaster工程 从菜单栏打开CAN报文发送窗口:【分析】->【报文发送】->【添加CAN/CAN FD发送】 可以选择【从CAN数据库添加报文】或者是【添加新的原始报文】 方法一 添加新的原始报文 可以配置报文发送的触发方式,有【手动】和【周期】两种。…

Linux多线程系列三: 生产者消费者模型,信号量使用,基于阻塞队列和环形队列的这两种生产者消费者代码的实现

Linux多线程系列三: 生产者消费者模型,信号量,基于阻塞队列和环形队列的这两种生产者消费者代码的实现 一.生产者消费者模型的理论1.现实生活中的生产者消费者模型2.多线程当中的生产者消费者模型3.理论 二.基于阻塞队列的生产者消费者模型的基础代码1.阻塞队列的介绍2.大致框架…

力扣刷题--2733. 既不是最小值也不是最大值【简单】

题目描述 给你一个整数数组 nums ,数组由 不同正整数 组成,请你找出并返回数组中 任一 既不是 最小值 也不是 最大值 的数字,如果不存在这样的数字,返回 -1 返回所选整数。 示例 1: 输入:nums [3,2,1,…

docker三种自定义网络(虚拟网络) overlay实现原理

docker提供了三种自定义网络驱动:bridge、overlay、macvlan。 bridge驱动类似默认的bridge网络模式。 overlay和macvlan是用于创建跨主机网络。 支持自定义网段、网关,docker network create --subnet 172.77.0.0/24 --gateway 172.77.0.1 my_n…

Mujoco仿真【xml文件的学习 3】

在学习Mujoco仿真的过程中,为了与时俱进,之前的mujoco210版本不再使用,改用了mujoco-3.1.4版本,下面继续mujoco仿真的学习! 先前关于mujoco的学习博客汇总如下: 强化学习:MuJoCo机器人强化学习…

基于深度学习OCR文本识别

第一步:概要 基于深度学习OCR文本识别分为两个模块:DBNet和CRNN。 DBNet是基于分割的文本检测算法,算法将可微分二值化模块(Differentiable Binarization)引入了分割模型,使得模型能够通过自适应的阈值图进行二值化,并…

社交网络安全:保护用户数据的Facebook实践

在数字化时代,社交网络安全成为了人们关注的焦点之一。作为全球最大的社交平台之一,Facebook一直在致力于保护用户数据安全和隐私。本文将探讨Facebook在社交网络安全方面的实践,以及它所采取的措施来保护用户数据的安全性。 1. 数据加密与隐…

【JAVA基础之内部类】匿名内部类

🔥作者主页:小林同学的学习笔录 🔥小林同学的专栏:JAVA之基础专栏 目录 1.内部类 1.1 概述 1.1.1 什么是内部类 1.1.2 什么时候使用内部类 1.2 内部类的分类 1.3 成员内部类 1.3.1 获取成员内部类对象的两种方式 1.3.2 经典面试…

C语言基础——循环(2)+关机程序

欢迎点赞支持 个人主页:励志不掉头发的内向程序员; 专栏主页:C语言基础; 文章目录 目录 前言 一、for循环的补充 二、循环的嵌套 1、嵌套的介绍 1.1 练习: 题目解析: 优化: 三、goto语句 1、go…

【四、性能测试】Linux stress 压力模拟测试工具

在做 CPU 问题解析之前,需要先了解一下压力模拟工具,可以将 CPU、MEM、IO 等进行压力模拟,可以在模拟压力的过程中进行问题解析 一、STRESS 模拟对CPU、Memory、IO、磁盘进行压力测试。可以使用 stress 工具,它是专门针对 linux…

python+selenium - UI自动框架之封装浏览器引擎driver方法

在做兼容性测试的适合,可以运行指定的浏览器(IE,Chrome,Edge) 目录文件: from selenium import webdriver from urllib3.exceptions import ProtocolError from common.log import *def getDriver():# if browserType is None:br…

国际货币基金组织警告:网络攻击影响全球金融稳定

近日,在一份关于金融稳定的报告中,国际货币基金组织(IMF)用了一章(共三章)的篇幅描述了网络攻击对金融环境的影响,并警告称,全球金融稳定正受到日益频繁和复杂的网络攻击的威胁。同时…

java企业级云MES系统全套源码,支持app、小程序、H5、台后管理

企业级云MES全套源码,支持app、小程序、H5、台后管理端 企业级智能制造MES系统源码,技术架构:springboot vue-element-plus-admin MES指的是制造企业生产过程执行系统,是一套面向制造企业车间执行层的生产信息化管理系统。MES可以…

Day37 贪心算法part04

LC860柠檬水找零(未掌握) 未掌握分析:20的时候找零卡住,同时贪心思路就想了很久 当bill[i]20的时候,我们有两种找零范式,找零10、5和找零三个5,优先找零10、5,因为三个5是可以替代10、5的情况的&#xff0…

APH-Archives of Public Health

文章目录 一、期刊简介二、征稿信息三、期刊表现四、投稿须知五、投稿咨询 一、期刊简介 Archives of Public Health是一份范围广泛的公共卫生杂志,致力于出版公共卫生领域所有可靠的科学。该杂志旨在更好地了解人群的健康。该杂志有助于公共卫生知识,加…

java中的TreeMap类和Hashtable类+Map集合遍历+集合小结

一、TreeMap类 实现了Map接口,元素为键值对、键不可重复、值可重复 特点:可排序 要求:Key类必须实现Comparable接口 底层结构:红黑树 1、可排序 2、常用方法 与HashMap一致 二、Hashtable类 实现了Map接口,元素…

EPBU/MOBI转PDF

--痛苦 --不爱BB 直接上码。 写了一个java方法,转epub 或者mobi 为 pdf的方法 (单个转换) import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.InputStreamReader;public class EbookConvert…

23-LINUX--TCP连接状态

一.TCP服务的特点 传输层协议主要有两个:TCP 协议和 UDP协议。TCP 协议相对于UDP协议的特点是:面向连接、字节流和可靠传输。 使用TCP协议通信的双方必须先建立连接,然后才能开始数据的读写。双方都必须为该连接分配必要的内核资源&a…

VUE3+TS+elementplus创建table,纯前端的table

一、前言 开始学习前端,直接从VUE3开始,从简单的创建表格开始。因为自己不是专业的程序员,编程主要是为了辅助自己的工作,提高工作效率,VUE的基础知识并不牢固,主要是为了快速上手,能够做出一些…

141.字符串:重复的字符串(力扣)

题目描述 代码解决 class Solution { public:// 计算字符串s的next数组&#xff0c;用于KMP算法void getNext(int *next, const string& s){int j 0; // j是前缀的长度next[0] 0; // 初始化next数组&#xff0c;第一个字符的next值为0for (int i 1; i < s.size(); …