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 相关文章推荐
Django的信号机制详解
May 05 Python
Python使用arrow库优雅地处理时间数据详解
Oct 10 Python
Python实现按照指定要求逆序输出一个数字的方法
Apr 19 Python
python matlibplot绘制多条曲线图
Feb 19 Python
python tkinter界面居中显示的方法
Oct 11 Python
Pycharm保存不能自动同步到远程服务器的解决方法
Jun 27 Python
python自动发微信监控报警
Sep 06 Python
jupyter 使用Pillow包显示图像时inline显示方式
Apr 24 Python
Python3实现建造者模式的示例代码
Jun 28 Python
Python Opencv实现单目标检测的示例代码
Sep 08 Python
Django多个app urls配置代码实例
Nov 26 Python
Python3+Flask安装使用教程详解
Feb 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 前一天或后一天的日期
2008/06/28 PHP
ExtJS 学习专题(一) 如何应用ExtJS(附实例)
2010/03/11 Javascript
javascript算法学习(直接插入排序)
2011/04/12 Javascript
整理8个很棒的 jQuery 倒计时插件和教程
2011/12/12 Javascript
qTip2 精致的基于jQuery提示信息插件
2012/02/17 Javascript
按Enter键触发事件的jquery方法实现代码
2014/02/17 Javascript
JavaScript中使用document.write向页面输出内容实例
2014/10/16 Javascript
js实现表单检测及表单提示的方法
2015/08/14 Javascript
jquery实现定时自动轮播特效
2015/12/10 Javascript
微信小程序 框架详解及实例应用
2016/09/26 Javascript
JS绘制微信小程序画布时钟
2016/12/24 Javascript
webpack配置sass模块的加载的方法
2017/07/30 Javascript
jQuery实现打开网页自动弹出遮罩层或点击弹出遮罩层功能示例
2017/10/19 jQuery
JavaScript 隐性类型转换步骤浅析
2018/03/15 Javascript
Angular父子组件通过服务传参的示例方法
2018/10/31 Javascript
微信小程序显示倒计时功能示例【测试可用】
2018/12/03 Javascript
VUE脚手架的下载和配置步骤详解
2019/04/01 Javascript
React组件对子组件children进行加强的方法
2019/06/23 Javascript
[02:54]辉夜杯主赛事第二日败者组 iG.V赛后采访
2015/12/26 DOTA
[00:12]DAC SOLO赛卫冕冠军 VG.Paparazi灬展现SOLO技巧
2018/04/06 DOTA
Python实现字符串与数组相互转换功能示例
2017/09/22 Python
在Django model中设置多个字段联合唯一约束的实例
2019/07/17 Python
PyQt5结合matplotlib绘图的实现示例
2020/09/15 Python
html5.2 dialog简介详解
2018/02/27 HTML / CSS
AmazeUI的JS表单验证框架实战示例分享
2020/08/21 HTML / CSS
全天然狗零食:Best Bully Sticks
2016/09/22 全球购物
UNIX命令速查表
2012/03/10 面试题
大学生职业生涯规划范文——找准自我,定位人生
2014/01/23 职场文书
一年级评语大全
2014/04/23 职场文书
施工安全汇报材料
2014/08/17 职场文书
2014年村官工作总结
2014/11/24 职场文书
研究生毕业论文导师评语
2014/12/31 职场文书
2015年班干部工作总结
2015/04/29 职场文书
《自然之道》读后感3篇
2019/12/17 职场文书
Nginx HTTP跳转至HTTPS
2022/05/15 Servers
Python软件包安装的三种常见方法
2022/07/07 Python