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中的类与实例
Apr 27 Python
详解Python中open()函数指定文件打开方式的用法
Jun 04 Python
查看TensorFlow checkpoint文件中的变量名和对应值方法
Jun 14 Python
Python使用pandas处理CSV文件的实例讲解
Jun 22 Python
python制作填词游戏步骤详解
May 05 Python
python中类的输出或类的实例输出为这种形式的原因
Aug 12 Python
Python使用Beautiful Soup爬取豆瓣音乐排行榜过程解析
Aug 15 Python
python 双循环遍历list 变量判断代码
May 04 Python
python温度转换华氏温度实现代码
Dec 06 Python
C++和python实现阿姆斯特朗数字查找实例代码
Dec 07 Python
如何用python插入独创性声明
Mar 31 Python
anaconda python3.8安装后降级
Jun 11 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输出金字塔的2种实现方法
2014/12/16 PHP
php实现的简单美国商品税计算函数
2015/07/13 PHP
php性能分析之php-fpm慢执行日志slow log用法浅析
2016/10/17 PHP
PHP常用工具函数小结【移除XSS攻击、UTF8与GBK编码转换等】
2019/04/27 PHP
LBS blog sql注射漏洞[All version]-官方已有补丁
2007/08/26 Javascript
JScript 脚本实现文件下载 一般用于下载木马
2009/10/29 Javascript
jquery不会自动回收xmlHttpRequest对象 导致了内存溢出
2012/06/18 Javascript
js获取html参数及向swf传递参数应用介绍
2013/02/18 Javascript
利用jquery.qrcode在页面上生成二维码且支持中文
2014/02/12 Javascript
jquery实现下拉菜单的二级联动利用json对象从DB取值显示联动
2014/03/27 Javascript
从JQuery源码分析JavaScript函数的apply方法与call方法
2014/09/25 Javascript
纯javascript代码实现计算器功能(三种方法)
2015/09/07 Javascript
jQuery实现两列等高并自适应高度
2016/12/22 Javascript
微信小程序 scroll-view实现锚点滑动的示例
2017/12/06 Javascript
js中时间格式化的几种方法
2018/07/22 Javascript
jQuery实现为动态添加的元素绑定事件实例分析
2018/09/07 jQuery
vue 循环加载数据并获取第一条记录的方法
2018/09/26 Javascript
微信小程序开发问题之wx.previewImage
2018/12/25 Javascript
Vue核心概念Action的总结
2019/01/18 Javascript
浅谈JS和jQuery的区别
2019/03/27 jQuery
vue中使用element组件时事件想要传递其他参数的问题
2019/09/18 Javascript
nodeJS与MySQL实现分页数据以及倒序数据
2020/06/05 NodeJs
简单了解Python下用于监视文件系统的pyinotify包
2015/11/13 Python
Python实现单词翻译功能
2017/06/06 Python
python 格式化输出百分号的方法
2019/01/20 Python
git查看、创建、删除、本地、远程分支方法详解
2020/02/18 Python
python实现梯度下降法
2020/03/24 Python
使用pyplot.matshow()函数添加绘图标题
2020/06/16 Python
python读取excel进行遍历/xlrd模块操作
2020/07/12 Python
全球酒店预订网站:Hotels.com
2016/08/10 全球购物
来自世界各地的饮料:Flavourly
2019/05/06 全球购物
意大利消费电子产品购物网站:SLG Store
2019/12/26 全球购物
李维斯牛仔裤荷兰官方网站:Levi’s NL
2020/08/23 全球购物
预备党员承诺书
2014/03/25 职场文书
办公室主任岗位承诺书
2014/05/29 职场文书
matplotlib之pyplot模块实现添加子图subplot的使用
2021/04/25 Python