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 相关文章推荐
python33 urllib2使用方法细节讲解
Dec 03 Python
python列表操作实例
Jan 14 Python
轻松实现TensorFlow微信跳一跳的AI
Jan 05 Python
详解tensorflow实现迁移学习实例
Feb 10 Python
PYTHON基础-时间日期处理小结
May 05 Python
Python 批量合并多个txt文件的实例讲解
May 08 Python
python3实现163邮箱SMTP发送邮件
May 22 Python
Python之使用adb shell命令启动应用的方法详解
Jan 07 Python
python requests库爬取豆瓣电视剧数据并保存到本地详解
Aug 10 Python
在python3中实现查找数组中最接近与某值的元素操作
Feb 29 Python
浅谈django不使用restframework自定义接口与使用的区别
Jul 15 Python
详解Python 最短匹配模式
Jul 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
浅谈Windows下 PHP4.0与oracle 8的连接设置
2006/10/09 PHP
php中目录,文件操作详谈
2007/03/19 PHP
php 生成静态页面的办法与实现代码详细版
2010/02/15 PHP
PHP动态输出JavaScript代码实例
2015/02/12 PHP
PHP分页初探 一个最简单的PHP分页代码的简单实现
2016/06/21 PHP
php实现登录tplink WR882N获取IP和重启的方法
2016/07/20 PHP
CI框架实现框架前后端分离的方法详解
2016/12/30 PHP
浅谈PHP中的面向对象OOP中的魔术方法
2017/06/12 PHP
PHP mongodb操作类定义与用法示例【适合mongodb2.x和mongodb3.x】
2018/06/16 PHP
php设计模式之迭代器模式实例分析【星际争霸游戏案例】
2020/04/07 PHP
用javascript实现在小方框中浏览大图的代码
2007/08/14 Javascript
用Javascript数组处理多个字符串的连接问题
2009/08/20 Javascript
json2.js的初步学习与了解
2011/10/06 Javascript
jQuery点击自身以外地方关闭弹出层的简单实例
2013/12/24 Javascript
jquery制作搜狐快站页面效果示例分享
2014/02/21 Javascript
js全选实现和判断是否有复选框选中的方法
2015/02/17 Javascript
Vue 多层组件嵌套二种实现方式(测试实例)
2017/09/08 Javascript
js使用Promise实现简单的Ajax缓存
2018/11/14 Javascript
微信小程序设置全局请求URL及封装wx.request请求操作示例
2019/04/02 Javascript
使用vue脚手架(vue-cli)搭建一个项目详解
2019/05/09 Javascript
详解新手使用vue-router传参时注意事项
2019/06/06 Javascript
vue+django实现一对一聊天功能的实例代码
2019/07/17 Javascript
layer弹出层自定义提交取消按钮的例子
2019/09/10 Javascript
js代码实现轮播图
2020/05/04 Javascript
js实现点击选项置顶动画效果
2020/08/25 Javascript
Python深入学习之对象的属性
2014/08/31 Python
python使用urllib2实现发送带cookie的请求
2015/04/28 Python
Python书单 不将就
2017/07/11 Python
pyqt5、qtdesigner安装和环境设置教程
2019/09/25 Python
python Tornado框架的使用示例
2020/10/19 Python
奥地利购买珠宝和手表网站:ELLA JUWELEN
2019/09/03 全球购物
中专生求职自荐信范文
2013/12/22 职场文书
家长给孩子的表扬信
2014/01/17 职场文书
刑事代理授权委托书
2014/09/17 职场文书
2016年党支部公开承诺书
2016/03/25 职场文书
三星 3nm 芯片将于第二季度开始量产
2022/04/29 数码科技