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 相关文章推荐
解决windows下Sublime Text 2 运行 PyQt 不显示的方法分享
Jun 18 Python
用Python给文本创立向量空间模型的教程
Apr 23 Python
Python实现给文件添加内容及得到文件信息的方法
May 28 Python
python numpy和list查询其中某个数的个数及定位方法
Jun 27 Python
python删除字符串中指定字符的方法
Aug 13 Python
Python列表list常用内建函数实例小结
Oct 22 Python
python 已知一个字符,在一个list中找出近似值或相似值实现模糊匹配
Feb 29 Python
TensorFlow2.1.0最新版本安装详细教程
Apr 08 Python
python中re模块知识点总结
Jan 17 Python
Python Django框架介绍之模板标签及模板的继承
May 27 Python
Anaconda配置各版本Pytorch的实现
Aug 07 Python
JAVA SpringMVC实现自定义拦截器
Mar 16 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
PHP小教程之实现链表
2014/06/09 PHP
使用php实现从身份证中提取生日
2016/05/09 PHP
JSON.parse 解析字符串出错的解决方法
2010/07/08 Javascript
Jquery动态更改一张位图的src与Attr的使用
2013/07/31 Javascript
javascript/jquery获取地址栏url参数的方法
2014/03/05 Javascript
js+div实现文字滚动和图片切换效果代码
2015/08/27 Javascript
js图片卷帘门导航菜单特效代码分享
2015/09/10 Javascript
超实用的JavaScript代码段 附使用方法
2016/05/22 Javascript
javascript动画之模拟拖拽效果篇
2016/09/26 Javascript
微信小程序 地图(map)实例详解
2016/11/16 Javascript
基于javascript实现按圆形排列DIV元素(二)
2016/12/02 Javascript
详解jQuery中基本的动画方法
2016/12/14 Javascript
AngularJS入门示例之Hello World详解
2017/01/04 Javascript
Vue指令的钩子函数使用方法
2017/03/20 Javascript
Angular.js自动化测试之protractor详解
2017/07/07 Javascript
Vue infinite update loop的问题解决
2019/04/23 Javascript
JS实现判断数组是否包含某个元素示例
2019/05/24 Javascript
vue把输入框的内容添加到页面的实例讲解
2019/11/11 Javascript
Python实现删除文件中含“指定内容”的行示例
2017/06/09 Python
python numpy数组的索引和切片的操作方法
2018/10/20 Python
利用Python进行图像的加法,图像混合(附代码)
2019/07/14 Python
matplotlib绘制多个子图(subplot)的方法
2019/12/03 Python
Python3.7基于hashlib和Crypto实现加签验签功能(实例代码)
2019/12/04 Python
Python3 Click模块的使用方法详解
2020/02/12 Python
Python socket连接中的粘包、精确传输问题实例分析
2020/03/24 Python
日本土著品牌,综合型购物网站:Cecile
2016/08/23 全球购物
高中生学习生活的自我评价
2013/10/09 职场文书
机械系大学毕业生推荐信
2013/11/27 职场文书
大学生职业生涯规划书范文
2014/01/04 职场文书
省优秀教师事迹材料
2014/01/30 职场文书
质量在我心中演讲稿
2014/09/02 职场文书
2014年党员教师自我剖析材料
2014/09/30 职场文书
商标侵权律师函
2015/05/27 职场文书
JavaScript 定时器详情
2021/11/11 Javascript
Python Matplotlib绘制等高线图与渐变色扇形图
2022/04/14 Python
Python 匹配文本并在其上一行追加文本
2022/05/11 Python