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编写生成树状结构的文件目录的脚本的教程
May 04 Python
Python中处理字符串之endswith()方法的使用简介
May 18 Python
Python中文分词实现方法(安装pymmseg)
Jun 14 Python
Python基于更相减损术实现求解最大公约数的方法
Apr 04 Python
浅谈numpy数组中冒号和负号的含义
Apr 18 Python
对python程序内存泄漏调试的记录
Jun 11 Python
Python中如何使用if语句处理列表实例代码
Feb 24 Python
python使用装饰器作日志处理的方法
Jul 11 Python
Python模拟伯努利试验和二项分布代码实例
May 27 Python
Python错误的处理方法
Jun 23 Python
PyQt实现计数器的方法示例
Jan 18 Python
用 Python 定义 Schema 并生成 Parquet 文件详情
Sep 25 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
PHPMyadmin 配置文件详解(配置)
2009/12/03 PHP
Destoon模板制作简明教程
2014/06/20 PHP
PHP+jQuery 注册模块的改进(三):更新到Smarty3.1
2014/10/14 PHP
CI框架给视图添加动态数据
2014/12/01 PHP
php获取网页上所有链接的方法
2015/04/03 PHP
thinkphp框架下404页面设置 仅三步
2016/05/14 PHP
用js实现的检测浏览器和系统的函数
2009/04/09 Javascript
jQuery隐藏和显示效果实现
2016/04/06 Javascript
js文件中直接alert()中文出来的是乱码的解决方法
2016/11/01 Javascript
JavaScript无缝滚动效果的实例代码
2017/03/27 Javascript
JS判断微信扫码的方法
2017/08/07 Javascript
详解Layer弹出层样式
2017/08/21 Javascript
微信小程序用户自定义模版用法实例分析
2017/11/28 Javascript
vue 中 beforeRouteEnter 死循环的问题
2019/04/23 Javascript
自定义javascript验证框架示例【附源码下载】
2019/05/31 Javascript
详解基于Wepy开发小程序插件(推荐)
2019/08/01 Javascript
js实现带有动画的返回顶部
2020/08/09 Javascript
[57:53]Secret vs Pain 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
python获取各操作系统硬件信息的方法
2015/06/03 Python
在Python程序和Flask框架中使用SQLAlchemy的教程
2016/06/06 Python
解决Python3.5+OpenCV3.2读取图像的问题
2018/12/05 Python
深入了解Django View(视图系统)
2019/07/23 Python
Django 使用easy_thumbnails压缩上传的图片方法
2019/07/26 Python
python将时分秒转换成秒的实例
2019/12/07 Python
回馈慈善的设计师太阳镜:DIFF eyewear
2019/10/17 全球购物
描述一下JVM加载class文件的原理机制
2013/12/08 面试题
土木工程应届生求职信
2013/10/31 职场文书
2014年教研活动总结范文
2014/04/26 职场文书
奥巴马连任演讲稿
2014/05/15 职场文书
基本公共卫生服务健康教育工作方案
2014/05/22 职场文书
应届生面试求职信
2014/07/02 职场文书
授权委托书样本及填写说明
2014/09/19 职场文书
2014年高中生自我评价范文
2014/09/26 职场文书
首席执行官观后感
2015/06/03 职场文书
如何将JavaScript将数组转为树形结构
2021/06/02 Javascript
Android实现获取短信验证码并自动填充
2023/05/21 Java/Android