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文件的md5加密方法
Apr 06 Python
Python语言描述KNN算法与Kd树
Dec 13 Python
Python线程下使用锁的技巧分享
Sep 13 Python
numpy linalg模块的具体使用方法
May 26 Python
Python实现的统计文章单词次数功能示例
Jul 08 Python
python实现矩阵和array数组之间的转换
Nov 29 Python
如何在django中添加日志功能
Feb 06 Python
python内打印变量之%和f的实例
Feb 19 Python
利用python绘制数据曲线图的实现
Apr 09 Python
Python 日期时间datetime 加一天,减一天,加减一小时一分钟,加减一年
Apr 16 Python
python连接mysql数据库并读取数据的实现
Sep 25 Python
Python使用UDP实现720p视频传输的操作
Apr 24 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
改变Apache端口等配置修改方法
2008/06/05 PHP
判断php数组是否为索引数组的实现方法
2013/06/13 PHP
PHP微信开发之二维码生成类
2015/06/26 PHP
PHP上传图片时判断上传文件是否为可用图片的方法
2016/10/20 PHP
PHP依赖注入(DI)和控制反转(IoC)详解
2017/06/12 PHP
PHP多种序列化/反序列化的方法详解
2017/06/23 PHP
Laravel中前端js上传图片到七牛云的示例代码
2017/09/04 PHP
PHP从零开始打造自己的MVC框架之路由类实现方法分析
2019/06/03 PHP
javascript面向对象的方式实现的弹出层效果代码
2010/01/28 Javascript
jQuery JSON的解析方式分享
2011/04/05 Javascript
MooTools 页面滚动浮动层智能定位实现代码
2011/08/23 Javascript
jQuery父级以及同级元素查找介绍
2013/09/04 Javascript
浅析XMLHttpRequest的缓存问题
2013/12/13 Javascript
js正则表达式匹配数字字母下划线等
2015/04/14 Javascript
TypeScript 学习笔记之基本类型
2015/06/19 Javascript
JavaScript仿flash遮罩动画效果
2016/06/15 Javascript
详解JavaScript时间处理之几个月前或几个月后的指定日期
2016/12/21 Javascript
深入理解JavaScript中的for循环
2017/02/07 Javascript
详解Node.js 命令行程序开发教程
2017/06/07 Javascript
浅谈vuex为什么不建议在action中修改state
2020/02/02 Javascript
antd-mobile ListView长列表的数据更新遇到的坑
2020/04/08 Javascript
Javascript实现秒表计时游戏
2020/05/27 Javascript
vue路由分文件拆分管理详解
2020/08/13 Javascript
Python脚本实现DNSPod DNS动态解析域名
2015/02/14 Python
python 通过logging写入日志到文件和控制台的实例
2018/04/28 Python
在Windows中设置Python环境变量的实例讲解
2018/04/28 Python
Python使用cx_Oracle模块操作Oracle数据库详解
2018/05/07 Python
Python 利用scrapy爬虫通过短短50行代码下载整站短视频
2018/10/29 Python
mac使用python识别图形验证码功能
2020/01/10 Python
python爬虫调度器用法及实例代码
2020/11/30 Python
html5如何在Canvas中实现自定义路径动画示例
2017/09/18 HTML / CSS
应用电子专业学生的自我评价
2013/10/16 职场文书
餐厅执行经理岗位职责范本
2014/02/26 职场文书
应届毕业生自荐信
2014/05/28 职场文书
店铺转让协议书(2014版)
2014/09/23 职场文书
主婚人致辞精选
2015/07/28 职场文书