当前位置: 首页 > news >正文

河北省住房和城乡建设厅网站主页简单网站建设价格

河北省住房和城乡建设厅网站主页,简单网站建设价格,网站描述更改,网站开发公司起名字什么是 Socket? Socket又称套接字#xff0c;应用程序通常通过套接字向网络发出请求或者应答网络请求#xff0c;使主机间或者一台计算机上的进程间可以通讯。 socket()函数 Python 中#xff0c;我们用 socket#xff08;#xff09;函数来创建…什么是 Socket? Socket又称套接字应用程序通常通过套接字向网络发出请求或者应答网络请求使主机间或者一台计算机上的进程间可以通讯。 socket()函数 Python 中我们用 socket函数来创建套接字语法格式如下 socket.socket([family[, type[, proto]]]) 参数 family: 套接字家族可以使AF_UNIX或者AF_INET 地址簇type: 套接字类型可以根据是面向连接的还是非连接分为SOCK_STREAM或SOCK_DGRAM 即tcp/ip和udp protocol: 一般不填默认为0.Socket 对象(内建)方法 函数描述服务器端套接字s.bind()绑定地址host,port到套接字 在AF_INET下,以元组host,port的形式表示地址。s.listen()开始TCP监听。backlog指定在拒绝连接之前操作系统可以挂起的最大连接数量。该值至少为1大部分应用程序设为5就可以了。s.accept()被动接受TCP客户端连接,(阻塞式)等待连接的到来客户端套接字s.connect()主动初始化TCP服务器连接。一般address的格式为元组hostname,port如果连接出错返回socket.error错误。s.connect_ex()connect()函数的扩展版本,出错时返回出错码,而不是抛出异常公共用途的套接字函数s.recv()接收TCP数据数据以字符串形式返回bufsize指定要接收的最大数据量。flag提供有关消息的其他信息通常可以忽略。s.send()发送TCP数据将string中的数据发送到连接的套接字。返回值是要发送的字节数量该数量可能小于string的字节大小。s.sendall()完整发送TCP数据完整发送TCP数据。将string中的数据发送到连接的套接字但在返回之前会尝试发送所有数据。成功返回None失败则抛出异常。s.recvform()接收UDP数据与recv()类似但返回值是data,address。其中data是包含接收数据的字符串address是发送数据的套接字地址。s.sendto()发送UDP数据将数据发送到套接字address是形式为ipaddrport的元组指定远程地址。返回值是发送的字节数。s.close()关闭套接字s.getpeername()返回连接套接字的远程地址。返回值通常是元组ipaddr,port。s.getsockname()返回套接字自己的地址。通常是一个元组(ipaddr,port)s.setsockopt(level,optname,value)设置给定套接字选项的值。s.getsockopt(level,optname[.buflen])返回套接字选项的值。s.settimeout(timeout)设置套接字操作的超时期timeout是一个浮点数单位是秒。值为None表示没有超时期。一般超时期应该在刚创建套接字时设置因为它们可能用于连接的操作如connect()s.gettimeout()返回当前超时期的值单位是秒如果没有设置超时期则返回None。s.fileno()返回套接字的文件描述符。s.setblocking(flag)如果flag为0则将套接字设为非阻塞模式否则将套接字设为阻塞模式默认值。非阻塞模式下如果调用recv()没有发现任何数据或send()调用无法立即发送数据那么将引起socket.error异常。s.makefile()创建一个与该套接字相关连的文件简单实例 服务端 我们使用 socket 模块的 socket 函数来创建一个 socket 对象。socket 对象可以通过调用其他函数来设置一个 socket 服务。 现在我们可以通过调用 bind(hostname, port) 函数来指定服务的 port(端口)。 接着我们调用 socket 对象的 accept 方法。该方法等待客户端的连接并返回 connection 对象表示已连接到客户端。 完整代码如下 #!/usr/bin/env python # -*- coding: utf-8 -*- # Author : Willpower-chen # blog: http://www.cnblogs.com/willpower-chen/import socket,os,time #导入socket和os模块#实例化AF_INET地址簇ipv4协议SOCK_STREAM这是TCP/IP协议 server socket.socket(socket.AF_INET,socket.SOCK_STREAM) server.bind((0.0.0.0,9999)) #绑定地址及服务端口 server.listen(5) #限制连接数 while True: #当一个client端断开时接收下一个客户端# 每个客户端发送过来的数据生成相应的实例connclient端连接地址addrconn,addr server.accept()print(新的连接,addr)while True:print(等待新的指令)data conn.recv(1024) #接收client端发来的数据if not data:print(客户端已断开)break #当数据为空时跳出循环等待下一个连接print(执行指令,data.decode()) #打印要执行的命令cmd_res os.popen(data.decode()).read()#返回client发过来的cmd命令在server端的执行结果#由于每次接收数据的大小为1024为了确定client需要接收几次所以需要先把总数据大小发给clientprint(开始发送,len(cmd_res))if len(cmd_res) 0 : #如果cmd执行结果为空时server端不会发送数据cmd_res cmd_res is not info #为了防止为空时不发数据自定义一个数据print(执行命令结果大小,len(cmd_res))#打印命令执行结果数据大小conn.send(str(len(cmd_res.encode(utf-8))).encode(utf-8)) #给client发送数据总大小信息#time.sleep(0.5)client_ack conn.recv(1024) #等待client端确认ack防止粘包print(ack from client,client_ack.decode(utf-8)) #打印ack确认信息conn.send(cmd_res.encode(utf-8)) #给client发送命令执行结果数据print(发送完毕) server.close() 客户端 接下来我们写一个简单的客户端实例连接到以上创建的服务。端口号为 9999。 socket.connect(hosname, port ) 方法打开一个 TCP 连接到主机为 hostname 端口为 port 的服务商。连接后我们就可以从服务端后期数据记住操作完成后需要关闭连接。 完整代码如下 #!/usr/bin/env python # -*- coding: utf-8 -*- # Author : Willpower-chen # blog: http://www.cnblogs.com/willpower-chen/ import socketclient socket.socket() #默认地址簇是ipv4传输协议是TCP/IP client.connect((localhost,9999))#与server建立连接 while True:cmd input(:).strip() # 用户输入cmd命令if len(cmd) 0: continue #如果用户输入为空循环输入client.send(cmd.encode(utf-8))#发送cmd命令encode是把字符串转为byte(python3.0传输只能是二进制)cmd_res_size client.recv(1024)#确认接收命令结果的长度print(命令结果大小,cmd_res_size.decode()) #打印命令结果的长度client.send(准备好接收了loser可以发了.encode(utf-8))#ack确认防止粘包注意这里不能用b因为加中文了receive_size 0 #已经接收的数据默认先设置为0receive_data .encode()while receive_size int(cmd_res_size.decode()): #已接收数据小于总数据时循环接收数据data client.recv(1024)receive_size len(data) #每次收到的有可能小于1024所以用lendata计算receive_data dataelse:print(cmd res receive done...,receive_size)print(receive_data.decode(utf-8)) client.close() ftp实例 server端 #!/usr/bin/env python # -*- coding: utf-8 -*- # Author : Willpower-chen # blog: http://www.cnblogs.com/willpower-chen/import os,hashlib,socketserver socket.socket() server.bind((0.0.0.0,9999)) server.listen(5) while True:conn,addr server.accept() #客户端实例成conn客户端连接地址为addrprint(客户端已经断开开始新的连接,客户端连接地址为,addr)while True:cmd conn.recv(1024) #客户端发出的命令if len(cmd) 0: break #如果接收到的命令为空断开连接等待新的连接# cmd_res os.popen(cmd.decode(utf-8)).read() #server端根据cmd命令获取结果filename cmd.decode().split()[1] #获取文件名if os.path.isfile(filename):file_total_size os.stat(filename).st_size #获取文件大小,得到的数据类型是intm hashlib.md5() # 打开md5哈希conn.send(str(file_total_size).encode(utf-8)) #发送总文件大小,conn.recv(1024) #接收client端确认防止粘包f open(filename,rb)#只读二进制方式打开文件文件句柄为ffor line in f:m.update(line) #md5逐行加密conn.send(line) #逐行发送数据由于之前打开方式是rb所以这里不用encondeserver_file_md5 m.hexdigest() #服务端文件md5哈希值conn.send(server_file_md5.encode(utf-8)) #发送服务端文件md5哈希值f.close() #关闭文件 server.close() client端 #!/usr/bin/env python # -*- coding: utf-8 -*- # Author : Willpower-chen # blog: http://www.cnblogs.com/willpower-chen/import socket,hashlibclient socket.socket() client.connect((localhost,9999)) while True:data input(:).strip() #输入命令行if len(data)0:continue #如果输入是空返回上层重新输入cmd,filename data.split() #获取命令和文件名if len(filename)0:continue #r如果没有文件名返回三层重新输入if data.startswith(get): #判断如果是get命令是继续以下操作client.send(data.encode(utf-8))#发送命令行file_total_size int(client.recv(1024).decode()) #获取文件大小信息,文件大小转换成int格式client.send(ack 确认.encode()) #ack确认防止粘包m hashlib.md5() #启用md5哈希加密receive_size 0 #定义一个接收数据初始值为0f open(filenamenew.txt,wb) #打开一个文件存储接收的文件数据# 如果接收的数据小于中大小循环接收数据while receive_size file_total_size:# 如果剩余数据的大于1024定义下次接收数据大小为size且大小是1024if file_total_size - receive_size 1024:size 1024# 如果剩余数据的小于等于1024定义下次接收数据大小为size大小是总大小减去已经接收的数据else:size file_total_size - receive_sizefile_recv client.recv(size) #接收文件数据# receive_size size #每接收一次数据接收数据大小累计加一次receive_size len(file_recv) #每接收一次数据接收数据大小累计加一次m.update(file_recv) # 每接收一次数据做一次md5加密f.write(file_recv) #每接收一次数据往文件里写入一次else:print(接收完毕要接收的文件总大小是%s ,已经接收的总数据是%s%(file_total_size,receive_size))f.close()server_file_md5 client.recv(1024) #接收server端文件md5值client_file_md5 m.hexdigest() #客户端文件md5值print(server_file_md5,server_file_md5.decode()) #打印server端文件md5值print(client_file_md5,client_file_md5) #打印client端文件md5值 client.close()     Python Internet 模块 以下列出了 Python 网络编程的一些重要模块 协议功能用处端口号Python 模块HTTP网页访问80httplib, urllib, xmlrpclibNNTP阅读和张贴新闻文章俗称为帖子119nntplibFTP文件传输20ftplib, urllibSMTP发送邮件25smtplibPOP3接收邮件110poplibIMAP4获取邮件143imaplibTelnet命令行23telnetlibGopher信息查找70gopherlib, urllib参考网址http://www.runoob.com/python/python-socket.html  转载于:https://www.cnblogs.com/willpower-chen/p/5867832.html
http://www.huolong8.cn/news/122231/

相关文章:

  • 坪山建设网站网站建设与维护 实训
  • 哪家网站终身免费网站建设
  • 东莞官方网站上热门最火标题
  • 南充营销型网站建设wordpress能改什么用
  • wordpress虚线框搜索引擎网站优化和推广方案
  • 网站建设为什么不给源代码做网站的具体内容
  • 做网站的开源代码在线做头像
  • 免费创建自己的网站平台旺道seo
  • 番禺手机网站建设wordpress如何添加模板
  • 公司网站没备案南博网站建设
  • 做煤的网站app小程序开发商排名
  • 外贸 网站 seo学外贸英语的网站
  • 红袖添香网站建设时间qq官网
  • 建网站用什么语言dedecms教育h5网站模板
  • 常州网站建设代理商杭州注册公司流程是怎样的
  • 网站做的不好赣州信息港官网
  • 北京在线建站模板怎么弄个人网站
  • 都匀网站开发的公司德阳市建设局网站地址
  • 有平面广告设计的网站有没有网址
  • 公司签约网站中国精品课程网站
  • 1688域名网站zencart网站地图生成
  • 周口航迪科技网站建设公司怎么样企业网站 html模板
  • 做公司网站的公司有哪些分销工具
  • 我要建立网站平面设计图网站
  • 广州网站建设推广专家团队哪个网站可以免费做H5
  • 网络推广网站推广方法做博客网站的空间容量需要多少
  • dedecms建站教程学校网站制作多少钱
  • 代理注册公司有什么风险网站主关键词如何优化
  • 手机阅读网站开发原因中国机械设备制造网
  • 怎么样可以设计网站做网站建设需要做哪些工作室