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

作者:lqh 时间:2023-09-13 01:46:02 

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()

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

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

来源:http://www.open-open.com/lib/view/open1483064489061.html

标签:Python,socket,网络编程
0
投稿

猜你喜欢

  • sql 查询慢的原因分析

    2024-01-16 13:11:29
  • asp中的rs.open与conn.execute的区别说明

    2011-02-24 10:56:00
  • 不受欢迎的“欢迎页”

    2008-04-20 16:41:00
  • ASP中查询数据库记录写入XML文件示例

    2007-08-23 13:12:00
  • 数据库Mysql性能优化详解

    2024-01-16 16:45:47
  • ASP.NET MVC4入门教程(六):验证编辑方法和编辑视图

    2024-05-13 09:15:36
  • javascript面向对象技术基础(二)

    2010-02-07 13:09:00
  • XML简易教程之一

    2008-09-05 17:19:00
  • pytorch 实现多个Dataloader同时训练

    2023-11-14 23:33:21
  • uniapp实现微信小程序的电子签名效果(附demo)

    2024-04-19 09:55:39
  • 基于vue的video播放器的实现示例

    2024-05-05 09:23:31
  • python实现监控linux性能及进程消耗性能的方法

    2021-10-20 03:27:56
  • Python xlwt设置excel单元格字体及格式

    2023-03-10 06:04:39
  • Python对象的属性访问过程详解

    2023-09-02 13:40:04
  • python实现超时退出的三种方式总结

    2023-07-22 17:56:34
  • Python随手笔记之标准类型内建函数

    2022-10-23 11:00:45
  • Python字符串拼接六种方法介绍

    2021-07-30 01:34:14
  • MySQL Installer is running in Community mode 的解决办法

    2024-01-19 09:14:54
  • python3 pandas 读取MySQL数据和插入的实例

    2024-01-22 06:21:33
  • keras 自定义loss损失函数,sample在loss上的加权和metric详解

    2021-06-03 08:11:33
  • asp之家 网络编程 m.aspxhome.com