Python中的TCP socket写法示例
作者:gaby_yan 发布时间:2023-06-25 00:21:05
前言
本文主要介绍了关于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
这是由于他们的传递编程框架不同造成的,如图。
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的代码。
来源:https://www.cnblogs.com/gaby-yan/archive/2018/05/10/9022427.html


猜你喜欢
- 在上一篇文章中实现了树莓派下对摄像头的调用,有兴趣的可以看一下:python+opencv实现摄像头调用的方法接下来,我们将使用python
- 举个例子来说,要查找出2007-10-12至2007-10-31之间在网站上注册的会员,选择好日期后,点击“查询”按钮,发现2007-10-
- 1、更新整张表,如果某一行数据的某一列的值为空,那么让他和另一列字段的值相等UPDATE ot_tgbz set update_day=if
- 本文完全利用numpy实现一个简单的BP神经网络,由于是做regression而不是classification,因此在这里输出层选取的激励
- os.system()和os.popen()概述大家搞python与操作系统交互时,必须掌握的两个方法就是os.system()和os.po
- python 换位密码算法的实例详解一前言:换位密码基本原理:先把明文按照固定长度进行分组,然后对每一组的字符进行换位操作,从而
- 记得上次电梯按钮讨论中有朋友提到日本的无序电梯,我没有太明白意思。除了各位大师提出的无厘头方案,也有不少超前的创意,好多都值得继续思考和探索
- 本文实例讲述了Python XlsxWriter模块Chart类用法。分享给大家供大家参考,具体如下:一 点睛Chart类是XlsxWrit
- 一、多进程的实现方法一# 方法包装 多进程from multiprocessing import Processfrom ti
- 一、mysqldump 简介mysqldump 是 MySQL 自带的逻辑备份工具。它的备份原理是通过协议连接到 MySQL 数据库,将需要
- 本教程为大家分享了Fly Bird小游戏的制作流程,供大家参考,具体内容如下1.分析页面结构,理清需求和功能游戏有三个界面,分别是开始界面,
- 最近迷上了Python,要说为什么呢?Python语法简单,功能强大,有广泛的第三方库能快速编程实现自己的想法(无需重复去造轮子)。就像某位
- // 获取字符串的字节长度function len(s) {s = String(s);return s.length + (s.match
- 本文实例讲述了php使用pthreads v3多线程实现抓取新浪新闻信息。分享给大家供大家参考,具体如下:我们使用pthreads,来写一个
- 今天来介绍一下Tensorflow里面的反卷积操作,网上反卷积的用法的介绍比较少,希望这篇教程可以帮助到各位反卷积出自这篇论文:Deconv
- JS代码:function showFlash(src,w,h){ html&nbs
- 我们通常会使用 apt-get或者是pip来安装包,但是这两者的安装路径是不一样的,区别如下:如果使用pip或者pip3安装,则第三方包在:
- 本文实例为大家分享了python实现雨滴下落到地面效果的具体代码,供大家参考,具体内容如下本程序在Windows 64位操作系统下,安装的是
- python中注释在python中的注释一般分为单行注释、多行注释以及文档注释。注释描述在实际开发过程中,有效的代码注释不仅可以提升个人的工
- 前言在早期学Python的时候,买了一本《Python编程快速上手-让繁琐工作自动化》。这本书里面讲得都比较基础,不过却非常的实用。估计从书