Socket常用语法与socketserver实例

1》Socket相关:

      1>Socket   Families(地址簇):

          socket.AF_UNIX     本机进程间通信

          socket.AF_INET   IPV4 

          socket.AF_INET6   IPV6 

      2>Socket  Types:

          socket.SOCK_STREAM    #for    tcp

          socket.SOCK_DGRAM   #for    udp 

          socket.SOCK_RAW     #原始套接字,普通的套接字无法处理ICMP,IGMP等网络报文,而SOCK_RAW可以;其次,SOCK_RAW也可以处理特殊的                                                                                                  IPv4报文,此外利用原始套接字,可以通过IP_HDRINCL套接字选项由用户构造IP头;

          socket.SOCK_RDM    #是一种可靠的UDP形式,即保证交付数据报但不保证顺序;SOCK_RAM用来提供对原始协议的低级访问,在需要执行某些特殊                                                                                          操作时使用,如发送ICMP报文,SOCK_RAM通常仅限于高级用户或管理员运行的程序使用;

          socket.SOCK_SEQPACKET    #废弃了

      3>Socket方法:

          socket.socket(family=AF_INET,type=SOCK_STREAM,proto=0,fileno=None)

          socket.socketpair([family[,type[,proto]]])

          socket.create_connection(address[,timeout[,source_address]])

          socket.getaddrinfo(host,port,family=0,type=0,proto=0,flags=0)       # 获取要连接的对端主机地址;

          sk.bind(address)

              s.bind(address):将套接字绑定到地址,address地址的格式取决于地址簇,在AF_INET下,以(host,port)的形式表示地址;

          sk.listen(backlog):开始监听传入连接,backlog指定在拒绝连接之前,可以挂起的最大连接数量;backlog等于5,表示内核已经接到了连接请求,但服务器还                                                                        没有调用accept进行处理的连接个数,这个值不能无限大,因为要在内核中维护连接队列;

          sk.setblocking(bool):是否阻塞(默认True),如果设置False,那么accept和recv时一旦无数据,则报错;

          sk.accept():接受连接并返回(conn,address),其中conn是新的套接字对象,可以用来接收和发送数据,address用来接收客户端的地址;接收TCP客户的连                                                                接(阻塞式)等待连接的到来;

          sk.connect(address):连接到address处的套接字,一般address的格式为元组(hostname,port),如果连接出错,返回socket.error错误;

          sk.connect_ex(address):同上,只不过会有返回值,连接成功时返回0,连接失败时返回编码,列如10061;

          sk.close():关闭套接字;

          sk.recv(bufsize[,flag]):接受套接字的数据,数据以字符串形式返回,bufsize指定最多可接收的数量,flag提供有关信息,通常可以忽略;

          sk.recvfrom(bufsize[,flag]):与recv()类似,但返回值是(data,address),其中data是包含接收数据的字符串,address是套接字地址;

          sk.send(string[,flag]):将string中的数据发送到连接的套接字,返回值是要发送的字节数量,该数量可能小于string的字节数量,即可能未将指定内容全部发                                                                                   送;

          sk.sendall(string[,flag]):将string中的数据发送到连接的套接字,但在返回之前会尝试发送所有数据,成功则返回None,否则失败;内部通过递归调用send,将所                                                                                 有内容发送出去;

          sk.sendto(string[,flag],address):将数据发送到套接字,address是形式为(ipaddr,port)的元组,指定运程地址,该函数主要用于UDP协议;

          sk.settimeout(timeout):设置套接字操作的超时期,timeout是一个浮点数,单位是秒,值为None表示没有超时期,一般应该在刚创建套接字时设置,因为他们                                                                                可能用于连接的操作(如client连接最多等待5s);

          sk.getpeername():返回连接套接字的远程地址,返回值通常是元组(ipaddr,port);

          sk.getsockname():返回套接字自己的地址,通常是一个元组(ipaddr,port);

          sk.fileno():套接字的文件描述符;

                socket.sendfile(file,offset=0,count=None);发送文件,但目前多数情况下并无什么用;

2》Socket   Server:

                         

      1>常用的socket  server:

          class   socketserver.ForkingTCPServer

          class   socketserver.ForkingUDPServer

          class   socketserver.ThreadingTCPServer

          class   socketserver.ThreadingUDPServer

       2>

2》Socketserver实例:

       服务器端:

            

      客户端:

          

      实例效果:

          客户端:

              

       

            

 

          

                  

 

转载于:https://www.cnblogs.com/xiaocheche/p/7820056.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/415350.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

重新记录一下微信后台的配置

1、打开开发的基本配置,成为开发者 2、启用开发者密码 3、看一下自己的公众号id 4、记录自己的AppID、AppSecret

vue2.0 如何自定义组件(vue组件的封装)

一、前言 之前的博客聊过 vue2.0和react的技术选型;聊过vue的axios封装和vuex使用。今天简单聊聊 vue 组件的封装。 vue 的ui框架现在是很多的,但是鉴于移动设备的复杂性,兼容性问题突出。像 Mint-UI 等说实话已经很不错了,但是坑…

又双叒叕 - 中国汉字的奇妙

四个字组成的汉字: 又双叒叕【zhuo】 屮艸芔茻【mǎng】 火炎焱燚【yi】 一二三亖【si】 土圭垚㙓【dui】 口吕品田【tian】 水沝淼㵘【man】 日昌晶【liu】 木林森【gua】 月朋朤【lang】 金鍂鑫鑫【繁体】【xin】

小程序 获取当前所在地理位置 城市 信息

需求:在小程序首页需要显示用户所在城市。 解决方案:使用wx.getLocation获取经纬度坐标,再使用微信小程序JavaScript SDK的地址逆解析方法reverseGeocoder,就可以完美搞定。 微信小程序JavaScript SDK官方地址 https://lbs.qq.c…

php用ajax方式实现四级联动

使用ajax方式实现了下简单的 四级联动&#xff0c; 数据库&#xff1a; 以下为前台代码&#xff1a; 1 <!DOCTYPE html>2 <html>3 <head>4 <title>5 四级联动6 </title>7 <meta charset"utf-8">8 <s…

前端学习(2641):懂代码之header表头页之控制全屏显示

<!-- 全屏显示 控制全屏显示第一步 --><div class"btn-fullscreen" click"handleFullScreen"><el-tooltip effect"dark" :content"fullscreen?取消全屏:全屏" placement"bottom"><i class"el-ic…

微信公众号 模版消息 跳转到小程序报错{ errcode: 40013, errmsg: 'invalid appid hint: [cC6RwA09011295]' }

今天做微信公众号模版消息推送&#xff0c;要求点击模版消息&#xff0c;就直接跳转到小程序里面。 当然&#xff0c;我已经按照官方文档&#xff0c;填写了正确的小程序appid&#xff0c;可是还是报错。 { errcode: 40013, errmsg: invalid appid hint: [cC6RwA09011295] }最…

Android studio 运行即打包keystore之build.gradle设置

1、在build.gradle中android下添加keystore位置signingConfigs 如&#xff1a; apply plugin: com.android.applicationandroid {signingConfigs {config {keyAlias key0keyPassword 123567storeFile file(E:\\521copy\\Myditukaifa\\keystore\\mybdkeystore.jks)//这里是你的…

OI回忆录——一个过气OIer的制杖历程

初中 初一参加学校信息学选修课&#xff0c;一周一节课&#xff0c;学pascal。  初一寒假&#xff08;大约是&#xff09;入选&#xff08;其实是钦定吧&#xff09;当时加上我只有3人的校队&#xff08;我当然是最弱的一个。  当时甚至有幸得到叉姐授课&#xff08;现在才…

工作157:动态路由

第一步 route里面加一个 第二步跳转

宝塔面板进行ssl配置,显示待域名确认

说一下我的问题原因&#xff1a; 阿里云里面的安全组没有配置80端口允许访问&#xff0c;当然&#xff0c;你也要设置443允许访问。

Android 文件转base64字符串,json文件转对象

/*** 文件转base64字符串** param file* return*/ public static String fileToBase64(File file) {String base64 null;InputStream in null;try {in new FileInputStream(file);byte[] bytes new byte[in.available()];int length in.read(bytes);base64 Base64.encode…

AngularJS移动端页面input无法输入

用angularJS写手机页面&#xff0c;有时候会发现input输入框点击了却不能输入&#xff0c;或者长按才能输入&#xff0c;可能是因为input绑定了ng-click导致&#xff0c;可去掉ng-click&#xff0c;将ng-click绑定的方法改用ng-focus就好了转载于:https://www.cnblogs.com/made…

Mongoose provide access to previous value of property in pre('save')

Mongoose allows you to configure custom setters in which you do the comparison. pre(‘save’) by itself won’t give you what you need, but together: schema.path(name).set(function (newVal) {var originalVal this.name;if (someThing) {this._customState tru…

前端学习(2644):懂代码之header表头页之折叠功能

第一步 header.vue <!-- 折叠按钮 --><div class"collapse-btn" click"collapseChage"><i v-if"!collapse" class"el-icon-s-fold"></i><i v-else class"el-icon-s-unfold"></i></d…

The following classes could not be instantiated:

Android studio新建项目xml文件不显示Preview问题解决方法 报错如下&#xff1a; 1、The following classes could not be instantiated: 2、The following classes could no 3、Failed to load AppCompat ActionBar with unknown error. 找到values文件夹下面的styles.xm…

简单使用CXF实现webserver(rs的独立发布)

简单使用cxf_rs的方式实现webserver 1创建maven project java项目 2,在maven文件中导入相关依赖 <dependencies>    <!--使用 CXF 的RS开发模式 --><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-frontend-jaxrs&…

小程序 ios页面 左右滑动 解决方法

单页面的微信小程序在ios手机上&#xff0c;会出现能左右滑动一定距离的问题。解决办法就两行代码&#xff1a; 设置外层元素的css为 width:100%; overflow-x:hidden;

工作158:vue里面为什么要加key

没有key <div id"app"><div><input type"text" v-model"name"><button click"add">添加</button></div><ul><li v-for"(item, i) in list"><input type"checkbox&…

Activity之间传递bitmap,Observer观察者模式

使用Observer模式进行传递 三个主要类&#xff1a;Observer、Subject、TestObServernotice /*** 作者&#xff1a;created by meixi* 邮箱&#xff1a;15913707499163.com* 日期&#xff1a;2019/5/23 15*/public interface Observer {void update(int id, int intparameter,…