Python socket网络编程TCP/IP服务器与客户端通信

发布时间 - 2026-01-10 22:19:19    点击率:

Python socket网络编程

初学 python,前段时间买了两本书《python 编程从入门到实践》《Python 核心编程第三版》,第一本书主要讲的是一些基本语法和一些基本的使用方法,而第二本则深入很多,自己看来也是一知半解,刚好看到了这部分网络编程,依然有好多不太理解的地方,不过想来通过自己不断的摸索,不断地搜寻资料学习,早晚应该会变得通透吧.......

这部分主要使用的模块就是 socket 模块,在这个模块中可以找到 socket()函数,该函数用于创建套接字对象,套接字也有自己的方法集,这些方法可以实现基于套接字的网络通信。

socket()模块函数

要创建套接字,必须使用 socket.socket()函数,他一般的语法如下

socket(socket_family, socket_type, protocol=0)

其中socket_family是 AF_UNIX或 AF_INET,socket_type 是 SOCK_STREAM 或 SOCK_DGRAM,protocol 通常省略,默认=0.

所以创建 TCP/IP 套接字,可以使用下面的方式调用 socket.socket().

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

同样创建 UDP/IP 套接字,使用下面的方法调用

udpSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

创建 TCP 服务器

创建 TCP 服务器的流程基本如下,并非正真正的代码

ss = socket()          #创建服务器套接字
    ss.bind()              #套接字与地址绑定
    ss.listen()             #监听连接
    inf_loop:             #服务器无限循环
        cs = ss.accepr()   #接受客户端连接
        comm_loop:      #通信循环
            cs.recv()/cs.send()   #对话(接收/发送)
        cs.close()        #关闭客户端套接字
    ss.close()            #关闭服务器套接字(可选)

实际中创建 TCP 服务器基本流程就如上边所说,可能稍有不同但基本思路应该是相通的,下边是真正穿件服务器的代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from socket import *      #将 socket 属性引入到命名空间

HOST = ''          #这是对 bind()方法的标识表示可以使用任何可用的地址
PORT = 21571      #端口号
BUFSIZ = 1024     #缓冲区大小,1kb
ADDR = (HOST,PORT)   #地址????

tcpSerSocket = socket(AF_INET,SOCK_STREAM)    #创建 tcp 套接字
tcpSerSocket.bind(ADDR)           #将地址绑定到套接字上
tcpSerSocket.listen(5)            #设置并启动套接字监听

while True:        #无限循环,等待客户端连接
  print('waiting for connection...')   
  tcpCliSocket,addr = tcpSerSocket.accept()    #被动接受客户端连接     
  print('...connected from:',addr)

  while True:      #对话循环,等待客户端发送消息
    data = tcpCliSocket.recv(BUFSIZ)   #接收客户端消息
    if not data:     #如果消息是空白,跳出对话循环,关闭当前连接
      break
    tcpCliSocket.send(data)   #如果收到消息,将消息原封不动返回客户端

  tcpCliSocket.close()
tcpSerSocket.close()

创建 TCP 客户端

同上边一样,一个简单的非代码流程

cs = socket()    #创建客户端套接字
    cs.connect()     #尝试连接服务器
    comm_loop:     #通信循环
        cs.send()/cs.recv()  #对话(发送/接收)
    cs.close()       #关闭客户端套接字

实际中创建客户端也是翻译上边的步骤

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from socket import *

HOST = 'localhost'    #服务器的主机名
PORT = 21571     #端口号
BUFSIZ = 1024     #缓冲区
ADDR = (HOST,PORT)   #地址

tcpCliSocket = socket(AF_INET,SOCK_STREAM)  #创建客户端套接字
tcpCliSocket.connect(ADDR)     #连接服务器

while True:        #通信循环
  data = input('> ')    #客户端输入信息
  if not data:   #如果输入信息为空,则跳出循环,关闭通信
    break

  data = str.encode(data)      
  tcpCliSocket.send(data)   #发送客户端信息
  data = tcpCliSocket.recv(BUFSIZ)   #接受服务器返回信息
  if not data:    #如果服务器未返回信息,关闭通信循环
    break
  print('get:',data.decode('utf-8'))

tcpCliSocket.close()

当然,这只是最基础的通信,而且关于主机名,端口号之类的东西暂时还不是很懂,目前所做的只是在同一台电脑上通信,端口号也需要一致,如果不同的电脑进行通信该怎么做?我还只是个小白.....

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# Python  # socket网络编程  # socket网络编程实例详解  # socket网络  # Python 网络编程之TCP客户端/服务端功能示例【基于socket套接字】  # python使用socket创建tcp服务器和客户端  # Python+Socket实现基于TCP协议的客户与服务端中文自动回复聊天功能示例  # Python基于socket实现TCP客户端和服务端  # 客户端  # 端口号  # 这部  # 可以使用  # 绑定  # 自己的  # 网络编程  # 这是  # 也有  # 我还  # 在这个  # 本书  # 不太  # 买了  # 原封不动  # 不是很  # 希望能  # 这只  # 可选  # 怎么做 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  如何用wdcp快速搭建高效网站?  如何正确下载安装西数主机建站助手?  JavaScript Ajax实现异步通信  浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】  Laravel怎么使用artisan命令缓存配置和视图  Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用  如何用搬瓦工VPS快速搭建个人网站?  如何在云指建站中生成FTP站点?  Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能  详解Android——蓝牙技术 带你实现终端间数据传输  laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法  iOS正则表达式验证手机号、邮箱、身份证号等  java中使用zxing批量生成二维码立牌  Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析  如何在云服务器上快速搭建个人网站?  如何将凡科建站内容保存为本地文件?  制作公司内部网站有哪些,内网如何建网站?  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】  Android中AutoCompleteTextView自动提示  javascript基于原型链的继承及call和apply函数用法分析  php嵌入式断网后怎么恢复_php检测网络重连并恢复硬件控制【操作】  Laravel如何理解并使用服务容器(Service Container)_Laravel依赖注入与容器绑定说明  如何在万网自助建站中设置域名及备案?  JS中对数组元素进行增删改移的方法总结  微信小程序 闭包写法详细介绍  Laravel怎么做数据加密_Laravel内置Crypt门面的加密与解密功能  laravel怎么配置和使用PHP-FPM来优化性能_laravel PHP-FPM配置与性能优化方法  如何快速查询网站的真实建站时间?  无锡营销型网站制作公司,无锡网选车牌流程?  如何在IIS中新建站点并配置端口与IP地址?  深圳网站制作平台,深圳市做网站好的公司有哪些?  Laravel怎么生成URL_Laravel路由命名与URL生成函数详解  Java解压缩zip - 解压缩多个文件或文件夹实例  米侠浏览器网页背景异常怎么办 米侠显示修复  Swift开发中switch语句值绑定模式  Python文件流缓冲机制_IO性能解析【教程】  如何获取PHP WAP自助建站系统源码?  JavaScript如何操作视频_媒体API怎么控制播放  Laravel如何使用Gate和Policy进行授权?(权限控制)  如何用已有域名快速搭建网站?  如何在腾讯云服务器快速搭建个人网站?  EditPlus中的正则表达式实战(6)  七夕网站制作视频,七夕大促活动怎么报名?  js实现获取鼠标当前的位置  香港服务器WordPress建站指南:SEO优化与高效部署策略  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  Java类加载基本过程详细介绍  Laravel如何创建自定义中间件?(Middleware代码示例)