前言:Socket是计算机之间进行网络通信的一套程序接口,相当于在发送端和接收端之间建立了一个通信管道。在实际应用中,一些远程管理软件和网络安全软件大多依赖于Socket来实现特定功能。本篇主要讲解TCP(传输控制协议——在网络编程中应用的比较频繁)方式在网络编程中的具体应用实例以及代码详解!


编写TCP时一般会用到(基本都会用到)以下的Socket模块:

connect(address):连接远程计算机

send(bytes[,flags]):发送数据

resv(bufsize[,flags]):接受数据

bind(address):绑定地址

listen(backlog):开始监听,等待客户连接

accept():响应客户端的一个请求

注:进行TCP通信的流程是,先开启服务端等待监听——>客户端开始建立与服务器端的连接——>服务器端收到响应包再给客户端发送回应包——>客户端收到回应包继续响应进行循环——>循环到通信结束后关闭连接(释放资源,必须要做!)


举例说明:设置对话系统,分为两部分别为服务端和客户端,能够基本演示TCP通信过程。

服务器端代码如下:

import socket  #导入socket模块
s = socket.socket() #创建socket对象
host = '127.0.0.1' #设置本地主机
port = 8888 #设置端口
s.bind((host,port)) #绑定端口
s.listen(6)  #开始监听,等待客户连接
while True:conn,addr = s.accept() #建立客户连接while True:date = conn.recv(2048)if date:print("服务端收到,我再给你发一个包".format(date.decode()))conn.send(date)else:conn.close()#关闭连接break;

客户端代码如下:

import socket #导入socket 模块
c = socket.socket()  #创建socket对象
host = '127.0.0.1'  #设置本地主机
port = 8888 #设置端口号
c.connect((host,port))
mess = input('你将要对服务端做什么?').encode()
c.send(mess)
print('客户端收到啦'.format(c.recv(2048)))
c.close()

演示结果如下:


接下来用具体例子来实现: 设计一个对话系统“小俊”,该应用为两部分,一部分为服务端,一部分为客户端。客户端发送请求信息(为服务端设定好的语句),服务端则返回应答信息。

实现之前先学习一下Socket()函数:

在python中,用socket()函数来创建套接字,语法格式如下:

socket.socket([family[,type[,protocol]]])

参数:

family:套接字家族可以使用AF_UNIX或AF_INET

type:套接字类型可以根据是面向连接的还是非连接的分为SOCK_STREAM或者SOCK_DGRAM

protocol:一般不填默认为0

服务端代码如下:

import socket
language = {'who are you':'I am xiaofeng','how old are you':'21','where are you from':'china!'} #设置字典language为后面对话所对应的服务端和客户端语句
host = '127.0.0.1'
port = 2222
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #声明socket类型面向连接,套接字家族为AF_INET
s.bind((host,port) )#绑定地址和端口
s.listen(3) #开始监听,表示可以使用3个链接排队
print("正在监听2222端口呢")
conn,addr =s.accept() #这串代码代表的意思是,等待响应客户端请求,接受连接,其实是返回两个值,一个是地址127.0.0.7,一个是随机监听的端口
print('连接的地址和端口:',addr)#conn是客户端链接过来,在服务器端为期生成的一个链接实例(没啥用)
while True:data = conn.recv(2048) #接受数据为2048字节data = data.decode() #数据解码if not data:breakprint ('接受到的数据:',data) #打印接受到数据conn.sendall(language.get(data,'Nothing').encode()) #然后再发送数据为language字典里面的内容
conn.close() #连接关闭
s.close()#会话关闭

客户端代码如下:

import socket,sys
host = '127.0.0.1'
port = 2222
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)  #声明socket类型面向连接,套接字家族为AF_INET
try:s.connect((host,port))
except Exception as e:print('服务端不存在!')sys.exit()
while True:conn = input('you say:')s.sendall(conn.encode())  #发送信息你叫什么名字?data = s.recv(2048) #接受数据并指定大小为2048字节data = data.decode() #解码接受的数据print('接受到的数据:',data)if conn.lower == "再见": #如果最后输入再见,表示会话结束!break
s.close()#会话关闭

输出结果如下:

python——Socket网络编程(详细讲解)(一)相关推荐

  1. Python Socket网络编程(一)初识Socket和Socket初步使用

    目录 前言 网络编程 实质 IP地址和端口 数据传输协议 协议 Socket 概念 套接字 socket对象方法 初步使用 功能 源码 运行结果 结语 前言 本系列博客是笔者学习Python Sock ...

  2. Python Socket网络编程(二)局域网内和局域网与广域网的持续通信

    目录 前言 IP地址 简介 公有IP 私有IP 局域网之间网络通信 前提 功能描述 源码 运行结果 局域网与广域网网络通信 前提 源码 结语 前言 本系列博客是笔者学习Python Socket的过程 ...

  3. python网络编程讲解_详解Python Socket网络编程

    Socket 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的,例如我们每天浏览网页.QQ ...

  4. python socket 网络编程

    socket 套接字:网络接口. 我们在网络上需要传输自己需要的数据,我们在网络上传输数据使用的是网络协议, 而套接字就是我们将数据从本地采用协议传输的接口 socket模型: socket族: #A ...

  5. Linux下的Python Socket网络编程(聊天机器人)

    转载文章: https://blog.csdn.net/slavik_/article/details/82430717

  6. python运维开发之socket网络编程01

    python运维开发之socket网络编程01说明:本文来自来自北京老男孩linux运维实战培训中心-运维开发课程免费视频内容,本文内容为系列内容,更多分享信息见:http://oldboy.blog ...

  7. Python面向对象进阶和socket网络编程

    写在前面 为什么坚持?想一想当初: 一.面向对象进阶 - 1.反射补充 - 通过字符串去操作一个对象的属性,称之为反射: - 示例1: class Chinese:def __init__(self, ...

  8. python编程入门与案例详解-Pythony运维入门之Socket网络编程详解

    Socket是什么? Socket 是电脑网络中进程间数据流的端点Socket 是操作系统的通信机制应用程序通过Socket进行网络数据的传输 首先,简单了解一下TCP通信过程: TCP三次握手(面试 ...

  9. python开发之Socket网络编程

    python开发之Socket网络编程 一.SOCKET基础 二.SOCKET通信流程 1. 流程描述: 2. 相关方法及参数介绍: 三.实例(屌丝追女神的故事) 1. 故事1:(一次通信) 2. 故 ...

最新文章

  1. 模块概念与使用及注意事项
  2. 阿里巴巴测试相关内容
  3. 【OpenCV】OpenCV函数精讲之 -- 通道分离:split()函数
  4. 10g添加用户 oracle_oracle10g下新建/删除用户
  5. gitlab syntax highlighting theme
  6. 7.2.5 dps 测试软件,魔兽7.2.5版本DPS专精Reroll指南视频:近战篇
  7. python自然语言处理学习笔记二
  8. java经纬度转平面坐标_经纬度到平面坐标的相互转换
  9. HigherHRNet代码复现问题集(assert isinstance(orig, torch.nn.Module))
  10. HTML+CSS个人静态网页设计
  11. OSChina 周三乱弹 ——我就爱吃月饼,就爱抢月饼。我高兴。
  12. 帆软初级证书 第二部分 数知鸟 答案
  13. HDU 4394 BFS
  14. 服务器是虚拟机好还是单机好,比较VMware和VirtualBox虚拟机的优缺点
  15. 多商户商城系统功能拆解03讲-平台端商家管理
  16. 在Eclipse环境下Tomcat的配置
  17. python数值类型教程_数据类型详细篇:数值
  18. 求从1到10 (k的平方)的连加和
  19. Java8 Function.identity() 的使用
  20. 重装WindowsXP系统之前必须进行的备份

热门文章

  1. Docker 镜像制作教程:减小镜像体积 两个技巧,将 Docker 镜像体积减小 99%
  2. c语言为什么要规定数据类型,c语言为什么有数据类型
  3. php随机抽奖及抽奖概率程序
  4. iOS手机淘宝加入购物车动画分析
  5. flutter系列之:flutter中的变形金刚Transform
  6. 框架学习之Mave(一)
  7. Mac虚拟机安装win7教程
  8. 总结49种软件测试方法,你知道几个?
  9. Kotlin 核心编程-面向对象(2)
  10. 网络管理软件,为何选用LaneCat网猫?