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 相关文章推荐
py中的目录与文件判别代码
Jul 16 Python
Python命名空间详解
Aug 18 Python
利用Python批量提取Win10锁屏壁纸实战教程
Mar 27 Python
用Django写天气预报查询网站
Oct 21 Python
在Python中字典根据多项规则排序的方法
Jan 21 Python
python控制nao机器人身体动作实例详解
Apr 29 Python
基于Python函数和变量名解析
Jul 19 Python
pytorch实现从本地加载 .pth 格式模型
Feb 14 Python
Python使用Paramiko控制liunx第三方库
May 20 Python
keras的三种模型实现与区别说明
Jul 03 Python
详解Python牛顿插值法
May 11 Python
Python利用Turtle绘制哆啦A梦和小猪佩奇
Apr 04 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
使用ThinkPHP自带的Http类下载远程图片到本地的实现代码
2011/08/02 PHP
php与flash as3 socket通信传送文件实现代码
2014/08/16 PHP
ThinkPHP分页实例
2014/10/15 PHP
PHP、Python和Javascript的装饰器模式对比
2015/02/03 PHP
php 读取输出其他文件的实现方法
2016/07/26 PHP
PHP中使用OpenSSL生成证书及加密解密
2017/02/05 PHP
巧用js提交表单轻松解决一个页面有多个提交按钮
2013/11/17 Javascript
ie浏览器使用js导出网页到excel并打印
2014/03/11 Javascript
js实现点击左右按钮轮播图片效果实例
2015/01/29 Javascript
原生js实现tab选项卡切换
2020/03/23 Javascript
Vue2.0组件间数据传递示例
2017/03/07 Javascript
AngularJS中控制器函数的定义与使用方法示例
2017/10/10 Javascript
使用webpack-dev-server处理跨域请求的方法
2018/04/18 Javascript
微信小程序位置授权处理方法
2019/06/13 Javascript
vue轮播组件实现$children和$parent 附带好用的gif录制工具
2019/09/26 Javascript
js、jquery实现列表模糊搜索功能过程解析
2020/03/27 jQuery
[51:00]Secret vs VGJ.S 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
[02:04]2020年夜魇暗潮预告片
2020/10/30 DOTA
[45:59]完美世界DOTA2联赛PWL S2 FTD vs GXR 第二场 11.22
2020/11/24 DOTA
从零学python系列之教你如何根据图片生成字符画
2014/05/23 Python
浅谈Python中数据解析
2015/05/05 Python
运用Python的webbrowser实现定时打开特定网页
2019/02/21 Python
python实现列表中最大最小值输出的示例
2019/07/09 Python
python中selenium操作下拉滚动条的几种方法汇总
2019/07/14 Python
django项目登录中使用图片验证码的实现方法
2019/08/15 Python
使用python实现画AR模型时序图
2019/11/20 Python
JINS眼镜官方网站:日本最大的眼镜邮购
2016/10/14 全球购物
世界领先的26岁以下学生和青少年旅行预订网站:StudentUniverse
2018/07/01 全球购物
索引覆盖(Index Covering)查询含义
2012/02/18 面试题
工厂保洁员岗位职责
2013/12/04 职场文书
会计专业自我评价
2014/02/12 职场文书
视光学专业自荐信
2014/06/24 职场文书
幼儿园综治宣传月活动总结
2015/05/07 职场文书
工程款申请报告
2015/05/15 职场文书
JavaScript分页组件使用方法详解
2021/07/26 Javascript
DIY胆机必读:各国电子管评价
2022/04/06 无线电