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 14 Python
深入解析Python中的urllib2模块
Nov 13 Python
python snownlp情感分析简易demo(分享)
Jun 04 Python
Python基础练习之用户登录实现代码分享
Nov 08 Python
Python 实现淘宝秒杀的示例代码
Jan 02 Python
火车票抢票python代码公开揭秘!
Mar 08 Python
tensorflow学习笔记之mnist的卷积神经网络实例
Apr 15 Python
浅析python3字符串格式化format()函数的简单用法
Dec 07 Python
把pandas转换int型为str型的方法
Jan 29 Python
python中class的定义及使用教程
Sep 18 Python
python导入不同目录下的自定义模块过程解析
Nov 18 Python
Pytorch 多维数组运算过程的索引处理方式
Dec 27 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
Drupal简体中文语言包安装教程
2014/09/27 PHP
php文件下载处理方法分析
2015/04/22 PHP
解析WordPress中的post_class与get_post_class函数
2016/01/04 PHP
PHP开发的微信现金红包功能示例
2017/06/29 PHP
php 自定义函数实现将数据 以excel 表格形式导出示例
2019/11/13 PHP
jQuery 图像裁剪插件Jcrop的简单使用
2009/05/22 Javascript
javascript中this做事件参数相关问题解答
2013/03/17 Javascript
jquery js 重置表单 reset()具体实现代码
2013/08/05 Javascript
jQuery选择器源码解读(一):Sizzle方法
2015/03/31 Javascript
js插件设置innerHTML时在IE8下提示“未知运行时错误”解决方法
2015/04/25 Javascript
jQuery 跨域访问解决原理案例详解
2016/07/09 Javascript
浅谈JS中的bind方法与函数柯里化
2016/08/10 Javascript
JS图片放大效果简单实现代码
2016/09/08 Javascript
bootstrap IE8 兼容性处理
2017/03/22 Javascript
JS运动特效之同时运动实现方法分析
2018/01/24 Javascript
JS动态插入脚本和插入引用外部链接脚本的方法
2018/05/21 Javascript
node和vue实现商城用户地址模块
2018/12/05 Javascript
JQuery获取元素尺寸、位置及页面滚动事件应用示例
2019/05/14 jQuery
微信小程序 image组件遇到的问题
2019/05/28 Javascript
Javascript confirm多种使用方法解析
2020/09/25 Javascript
[01:08:56]DOTA2-DPC中国联赛 正赛 Magma vs LBZS BO3 第一场 2月7日
2021/03/11 DOTA
Python创建模块及模块导入的方法
2015/05/27 Python
Python3使用Matplotlib 绘制精美的数学函数图形
2019/04/11 Python
python数据持久存储 pickle模块的基本使用方法解析
2019/08/30 Python
Ubuntu16.04安装python3.6.5步骤详解
2020/01/10 Python
详解如何修改python中字典的键和值
2020/09/29 Python
荷兰牛仔裤网上商店:Jeans Centre
2018/04/03 全球购物
哥德堡通行证:Gothenburg Pass
2019/12/09 全球购物
怎样客观的做好自我评价
2013/12/28 职场文书
政府门卫岗位职责
2014/04/29 职场文书
大型公益活动策划方案
2014/08/20 职场文书
检讨书大全
2015/01/27 职场文书
二年级数学教学反思
2016/02/16 职场文书
护理专业毕业自我鉴定
2019/08/12 职场文书
Python实现滑雪小游戏
2021/09/25 Python
MySQL数据库实验实现简单数据库应用系统设计
2022/06/21 MySQL