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实现根据图标提取分类应用程序,分享给大家供大家参考。具体方法如下:#!/usr/bin/python # -*-
- reflect反射首先,我们要区分两个概念——“标识名”和&
- 在设计网页之前,客户或产品经理会提出对网页视觉风格设计的期望:活跃、大气、稳重、信赖、都市化….. 设计师一听到关键词或许很自然地在心里蹦出
- 1.因为oracle 10g暂时没有与win7兼容的版本,我们可以通过对安装软件中某些文件的修改达到安装的目地。 a)打开“\ORACLE1
- sql server端口,我们可以通过\"服务器端网络试用工具\"和\"客户端实用工具\"来设定,设
- 最基础的形态学操作有四个,分别是腐蚀、膨胀、开计算和闭计算,`scipy.ndimage分别实现了二值数组和灰度数组的这四种运算二值灰度bi
- Photoshop Express,也就是传说中的web版photoshop,来了。和想象中的web photoshop相比,这个Photo
- 本教程配置好后一劳永逸,不用再配置,每次只需要选择 Python 解释器即可打开KBEngine的服务器项目文件夹(资产目录)其主要工程目录
- 题目: 一个环形单链表,从头结点开始向后,指针每移动一个结点,就计数加1,当数到第m个节点时,就把该结点删除,然后继续从下一个节点开始从1计
- blankzheng的blog:http://www.planabc.net/经常有朋友问我,网站要在哪些浏览器上测试?要达到怎样的兼容?我
- 最近对list设计感兴趣,今天说的是list视图方式的设计。感觉有些细节非常有意思,拿出来跟大家讨论。首先我们来看下windows下文件夹管
- 在应用程序的开发中,有些输入信息是动态的,比如我们要注册一个员工的工作经历,比如下图如果做成死的,只能填写三个,如果是四个呢?或者更多呢,那
- 本文实例讲述了python读写配置文件操作。分享给大家供大家参考,具体如下:在用编译型语言写程序的时候,很多时候用到配置文件,作为一个约定的
- 上节基本完成了SVM的理论推倒,寻找最大化间隔的目标最终转换成求解拉格朗日乘子变量alpha的求解问题,求出了alpha即可求解出SVM的权
- 首先介绍下怎么发现的吧, 线上的项目日志是通过 logging 模块打到 syslog 里, 跑了一段时间后发现 syslog 的 UDP
- 大多数程序员考虑编程时,他们都要设想用于编写应用程序的 命令式样式和技术。最受欢迎的通用编程语言(包括 Python 和其它面向对象的语言)
- rss.asp格式的 下面代码保存为rss.asp 代码如下:<!--#include file="conn.as
- .xls格式 Office2003及以下版本 .xlsx格式Offi
- 1.设置phpMyAdmin Language:Chinese simplified (zh-utf-8)MySQL 字符集:UTF-8 U
- 平时我们写个脚本,要放到后台执行去,我们怎么做呢?nohup python example.py 2>&1 /dev/null