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实现将读入的多维list转为一维list的方法
Jun 28 Python
Python使用gRPC传输协议教程
Oct 16 Python
pycharm重置设置,恢复默认设置的方法
Oct 22 Python
Python 给屏幕打印信息加上颜色的实现方法
Apr 24 Python
Python使用线程来接收串口数据的示例
Jul 02 Python
Python参数类型以及常见的坑详解
Jul 08 Python
Python基于Opencv来快速实现人脸识别过程详解(完整版)
Jul 11 Python
python word转pdf代码实例
Aug 16 Python
python set集合使用方法解析
Nov 05 Python
django在保存图像的同时压缩图像示例代码详解
Feb 11 Python
python自动脚本的pyautogui入门学习
Apr 01 Python
如何使用python记录室友的抖音在线时间
Jun 29 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
dedecms 制作模板中使用的全局标记图文教程
2007/03/11 PHP
CI框架入门示例之数据库取数据完整实现方法
2014/11/05 PHP
PHP+JS实现大规模数据提交的方法
2015/07/02 PHP
PHP实现的防止跨站和xss攻击代码【来自阿里云】
2018/01/29 PHP
Javascript 判断 object 的特定类转载
2007/02/01 Javascript
Tinymce+jQuery.Validation使用产生的BUG
2010/03/29 Javascript
理解Javascript_10_对象模型
2010/10/16 Javascript
jQuery UI Datepicker length为空或不是对象错误的解决方法
2010/12/19 Javascript
非常有用的40款jQuery 插件推荐(系列二)
2011/12/25 Javascript
Javascript实现飞动广告效果的方法
2015/05/25 Javascript
jQuery结合AJAX之在页面滚动时从服务器加载数据
2015/06/30 Javascript
jquery图片倾斜层叠切换特效代码分享
2015/08/27 Javascript
jquery遍历json对象集合详解
2016/05/18 Javascript
JavaScript实现简单的拖动效果
2016/07/02 Javascript
使用Bootstrap Tabs选项卡Ajax加载数据实现
2016/12/23 Javascript
JS实现访问DOM对象指定节点的方法示例
2018/04/04 Javascript
使用layui实现树形结构的方法
2019/09/20 Javascript
NodeJS和浏览器中this关键字的不同之处
2021/03/03 NodeJs
[02:00]DOTA2英雄COSPLAY闹市街头巡游助威2015国际邀请赛
2015/08/02 DOTA
在Python web中实现验证码图片代码分享
2017/11/09 Python
Python使用Scrapy保存控制台信息到文本解析
2017/12/27 Python
tensorflow1.0学习之模型的保存与恢复(Saver)
2018/04/23 Python
python opencv摄像头的简单应用
2019/06/06 Python
12个步骤教你理解Python装饰器
2019/07/01 Python
python使用Pandas库提升项目的运行速度过程详解
2019/07/12 Python
Django之路由层的实现
2019/09/09 Python
基于python实现学生信息管理系统
2019/11/22 Python
使用Python画出小人发射爱心的代码
2019/11/23 Python
解决python中0x80072ee2错误的方法
2020/07/19 Python
基于selenium及python实现下拉选项定位select
2020/07/22 Python
Python 实现一个计时器
2020/07/28 Python
如何将无状态会话Bean发布为WEB服务,只有无状态会话Bean可以发布为WEB服务?
2015/12/03 面试题
区域销售经理职责
2013/12/22 职场文书
学校领导四风问题整改措施思想汇报
2014/10/09 职场文书
2014年辅导员工作总结
2014/11/18 职场文书
大学班长竞选稿
2015/11/20 职场文书