前言: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. 将 CentOS 8 操作系统迁移到 Oracle Linux
  2. 异形隔离java剧情_异形隔离攻略 系统上手教程 全剧情流程图文攻略(41)
  3. 0728pm 控制器
  4. 租网站服务器安全吗,租用的服务器安全吗
  5. python偏函数和高阶函数_【Python入门】8.高阶函数之 匿名函数和偏函数
  6. 简洁自适应个人码农主页源码
  7. python程序文件的扩展名称是什么_python程序文件的扩展名称是什么_Python教程,python,扩展名...
  8. 注意!下个月开始 GitHub 新建存储库的默认分支就不叫“master”了!
  9. 扎克伯格、张一鸣的技术“原罪”
  10. 解决只能滑动弹框内容不能滑动弹框底层内容
  11. 数据比赛大杀器----模型融合(stackingblending)(转载)
  12. tenorflow异常集合(自用记录)
  13. 使用nvidia-nsight编译器开发C/C++以及cuda编程
  14. 【重磅】聚焦券商终端业务,博睿数据发布新一代券商终端核心业务体验可观测平台
  15. 趋势科技2014校园招聘笔试题
  16. asp.net房屋出租销售网
  17. 对IPv6的理解以及其与IPv4的区别
  18. 国外it的一些学习网站
  19. 深入探索 Android 网络优化(一、网络筑基篇,为什么Flutter能最好地改变移动开发
  20. 快手引流犯法吗?如果发现造成具体损失以及影响恶劣的情况会被起诉

热门文章

  1. 混凝土裂缝检测专题(2)裂缝检测技术(基于图像处理的)
  2. 【Android App】实战项目之仿微信的附近的人(附源码和演示 超详细)
  3. ldap运维中遇到的问题
  4. 页面数据导出为word或者excel
  5. python打包小程序
  6. Android离线打包文档
  7. 利用JQUERY实现无刷新注册功能
  8. 博通机顶盒平台启动时间优化(一)
  9. Microsoft AppLocale 实用程序
  10. matlab按图像边缘抠图_ps快速选择工具|抠图常用工具(一)