Python中的TCP socket写法示例


Posted in Python onMay 11, 2018

前言

本文主要介绍了关于Python中TCP socket的写法,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。

一、 服务器server的写法:

1. 创建 socket 套接字:

网络编程接口 socket(family = AF_INET , type = SOCKET_STREM,proto = 0, fileno = None)   提供了多种socket family。AF_INET 是默认的family,需要绑定IP和端口。 127.0.0.1是一个特殊的IP地址,表示本机地址。如果绑定到这个地址,客户端必须同时在本机运行才能连接,也就是说,外部的计算机无法连接进来。

不同的协议family使用的地址形式不同,通常来说我们使用的是AF_INET-----地址是以(IP,PORT)形式存。在type 类型,我们常用的有两种 SOCKET_STREM ,流式套接字,表示基于连接的TCP套接字,SOCKET_DGRAM, 数据报套接字,基于无连接的(UDP)接口。 如果不设定,默认就是 SOCKET_STREM 。

2. bind 绑定     

使用方法:socket.bind(address)  把套接字绑定在 address 上,address的形式 根据 family 来设定。不管是client还是server,创建socket的时候都是通过一个本地的文件来进行的。

3. listen 监听      

使用方法:socket.listen([backlog])

使能 socket 接收连接请求,listen(self,backlog = None) ,backlog需要大于0,指定了可以缓存的连接请求的数量。

4. accept 接受请求连接

在等待一个即将来临的连接,会返回一个代表连接的新的socket,还会返回一个地址(host和port),可以用两个东西接收,前一个代表新的socket,后一个就是接收地址。

写的方法:connet_socket,client_addr = srv.accept() connet_socket就是新的socket,然后connet_socket开始接下来的传输。connet_socket,client_addr,前者表示接收的新的socket,后者就是地址,具体看程序第10行。

5. 接收数据

使用方法:socket.recv(bufsize[,flags])

从 socket 中接收数据,返回的是 bytes ,是接收到的内容。bufsize指定了一次最多接收多少个数据,如果没有数据接收,程序会阻塞,一直到有数据或者远程终端断开连接.

6. 发送数据

使用方法:socket.send(bytes[, flags])

你的socket必须和远程的socket建立了联系,返回值是发送的数量,可以判断你的数据是否发送完毕,如果没有,继续send余下来的数据

import socket
hostname = '127.0.0.1' #设置主机名
port = 6666  #设置端口号 要确保这个端口号没有被使用,可以在cmd里面查看
addr = (hostname,port)
srv = socket.socket() #创建一个socket
srv.bind(addr)
srv.listen(5)
print("waitting connect")
while True:
 connect_socket,client_addr = srv.accept()
 print(client_addr)
 recevent = connect_socket.recv(1024)
 print(str(recevent,encoding='gbk'))
 connect_socket.send.send(bytes("你好,数据传输完成,这里是gaby-yan--server",encoding='gbk'))
 connect_socket.close()

二、 客户端client的写法:

客户端的写法相对比较简单,只有

1.创建socket

2. 建立连接 connect

3. 发送 send

4. 接收recv

这是由于他们的传递编程框架不同造成的,如图。

Python中的TCP socket写法示例 

import socket
hostname = '127.0.0.1'
port = 7777
addr = (hostname,port)

clientsock = socket.socket() ## 创建一个socket
clientsock.connect(addr) # 建立连接

say = input("输入你想传送的消息:")
clientsock.send(bytes(say,encoding='gbk')) #发送消息
recvdata = clientsock.recv(1024)  #接收消息 recvdata 是bytes形式的
print(str(recvdata,encoding='gbk')) # 我们看不懂bytes,所以转化为 str
clientsock.close()

注意:先运行server的代码,再运行client的代码。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
python基础教程之元组操作使用详解
Mar 25 Python
Python的消息队列包SnakeMQ使用初探
Jun 29 Python
python中利用队列asyncio.Queue进行通讯详解
Sep 10 Python
python实现Floyd算法
Jan 03 Python
Python 实现引用其他.py文件中的类和类的方法
Apr 29 Python
Python操作mongodb数据库进行模糊查询操作示例
Jun 09 Python
python递归函数绘制分形树的方法
Jun 22 Python
python3中os.path模块下常用的用法总结【推荐】
Sep 16 Python
python实现键盘控制鼠标移动
Nov 27 Python
简单了解python的内存管理机制
Jul 08 Python
解决Python命令行下退格,删除,方向键乱码(亲测有效)
Jan 16 Python
python实现A*寻路算法
Jun 13 Python
Python简单定义与使用二叉树示例
May 11 #Python
Python堆排序原理与实现方法详解
May 11 #Python
python 执行shell命令并将结果保存的实例
May 11 #Python
python 实现登录网页的操作方法
May 11 #Python
Python利用splinter实现浏览器自动化操作方法
May 11 #Python
Python爬虫信息输入及页面的切换方法
May 11 #Python
对python-3-print重定向输出的几种方法总结
May 11 #Python
You might like
Codeigniter框架的更新事务(transaction)BUG及解决方法
2014/07/25 PHP
PHP模块化安装教程
2016/06/01 PHP
php安装ssh2扩展的方法【Linux平台】
2016/07/20 PHP
php 自定义错误日志实例详解
2016/11/12 PHP
PHP实现微信JS-SDK接口选择相册及拍照并上传的方法
2016/12/05 PHP
图片img的src不变让浏览器重新加载实现方法
2013/03/29 Javascript
JS获取月的最后一天与JS得到一个月份最大天数的实例代码
2013/12/16 Javascript
一个简单的jquery的多选下拉框(自写)
2014/05/05 Javascript
原生JS实现风箱式demo,并封装了一个运动框架(实例代码)
2016/07/22 Javascript
jQuery EasyUI右键菜单实现关闭标签/选项卡
2016/10/10 Javascript
JavaScript箭头函数_动力节点Java学院整理
2017/06/28 Javascript
详解刷新页面vuex数据不消失和不跳转页面的解决
2018/01/30 Javascript
Vue.js中的computed工作原理
2018/03/22 Javascript
Bootstrap-table使用footerFormatter做统计列功能
2018/09/07 Javascript
基于iview-admin实现动态路由的示例代码
2019/10/02 Javascript
微信小程序实现侧边分类栏
2019/10/21 Javascript
JavaScript arguments.callee作用及替换方案详解
2020/09/02 Javascript
手写Vue源码之数据劫持示例详解
2021/01/04 Vue.js
Python利用正则表达式匹配并截取指定子串及去重的方法
2015/07/30 Python
用python爬取租房网站信息的代码
2018/12/14 Python
python画图的函数用法以及技巧
2019/06/28 Python
英国奢侈品网站:MatchesFashion
2016/12/16 全球购物
Clarks其乐鞋荷兰官网:Clarks荷兰
2019/07/05 全球购物
雅诗兰黛加拿大官网:Estee Lauder加拿大
2019/07/31 全球购物
公司年会搞笑主持词
2014/03/24 职场文书
献爱心活动总结
2014/05/07 职场文书
铣床操作工岗位职责
2014/06/13 职场文书
2014年创先争优工作总结
2014/12/11 职场文书
2015年医院科室工作总结范文
2015/05/26 职场文书
春节慰问简报
2015/07/21 职场文书
大学入学感言
2015/08/01 职场文书
2016元旦文艺汇演主持词(开场白+结束语)
2015/12/03 职场文书
React forwardRef的使用方法及注意点
2021/06/13 Javascript
JavaScript 反射学习技巧
2021/10/16 Javascript
Kubernetes控制节点的部署
2022/04/01 Servers
redis 解决库存并发问题实现数量控制
2022/04/08 Redis