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
猜你喜欢
- sql2000的服务器版本是8.0,sql2005是9.0首先要读安装必须配置(见后记)1.我是先装2000的,安装好后打上sp4补丁,(s
- 我今天晚上,做一个快印公司的网站布局,在Div镶套布局中,父标签DIV的高度不变。在IE下没有问题,但是在FIREFOX下就有问题了。如图:
- 在我前一阵子刚刚写了“HTML5与Flash,不得不说的话题”的评论后,如各位所料,由于牵扯到多方利益和未来标准制定的角色份量,这不,有可能
- 1、互动流通的活跃度是社区网站的关键,产品设计者大都需要在此猛下药。facebook有利用率最高的minifeed,myspace有“好友的
- 如何制作一个安全的页面?随后,让我们来编程:manage.asp' 登录页面<%@ Language=VB
- 什么是CSS Sprites?“Sprite”(精灵)这个词在计算机图形学中有它独特的定义,由于游戏、视频等画质越来越高,必须有一种技术可以
- 阅读上一篇:FrontPage2002简明教程四:网页超级链接 一、三种添加CSS的方式 在FrontPage 2002里可以通过三种方式给
- 我们平日办公时用得最多的软件是Execl、Word或WPS Office等,你的计算机中一定储存着大量的XLS、DOC、WPS文件吧!网页制
- 最近试用mysql proxy,遇到若干问题,好在一一找到了解决方案,列出来备忘。这次使用的版本是0.6.x,也许新版本就没有这些问题了。无
- 流行的 JavaScript 库有jQuery,MooTools,Prototype,Dojo和YUI等,这些 JavaScript 库功能
- 揭秘一个普通的输入框背后惊人的秘密。某月某日,某项目某页面,需要一个价格区间筛选功能,需求合理,所以设计做上去。这是一个无比普通的输入框。在
- 这里其实并不需要其它的什么函数来支持,只需要使用MYSQL提供的一些SQL语句就可以了。这里为了简单起见,以MYSQL的系统表USER为例,
- 树形目录显示程序问题描述:在我们项目中常常会出现自关联的数据表,如果我们从整体看去,整个表就呈现为一个树形数据结构(对于复杂的情况,它可能变
- PHP join() 函数实例把数组元素组合为一个字符串:<?php $arr = array('Hello',
- 在网页制作中,表单中的对象总是给人一种单调与沉闷的感觉,比如说按钮、文本框等,它们一成不变的模样与颜色
- 我就废话不多说了,大家还是直接看代码吧~func ReadLine(fileName string) ([]string,error){f,
- js也是可以做出狂炫的图形的,恭请超级高手分析。给大家看个例子吧。http://www.p01.org/releases/DHTML_con
- 简单介绍下功能吧:使用了ASP的一个对象ServerVariables(服务器环境变量),通过这个环境变量可以获取到真正的下载地址再通过一些
- 一直以来都对DOMDocument与 XMLHTTP 两者的区别不甚了解,今天用 eXeScope 查看了msxml6.dll 内
- 格式为: SCRENC [/s] [/f] [/xl] [/l defLanguage ] [/e de