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

开个捕鱼网站怎么做有谁做网站

开个捕鱼网站怎么做,有谁做网站,潍坊网站制作招聘,深圳网站建设首选上榜网络文章目录 一、Socket概念二、套接字的发展史及分类三、Socket的使用语法格式(基于TCP协议)1.基于TCP协议的套接字(socket)编程半连接池 2.基于UDP协议的套接字(socket)编程也可以使用服务端只接收客户端消息 黏包现象 一、Socket概念 Socket套接字#xff0c;一种独立于协议的… 文章目录 一、Socket概念二、套接字的发展史及分类三、Socket的使用语法格式(基于TCP协议)1.基于TCP协议的套接字(socket)编程半连接池 2.基于UDP协议的套接字(socket)编程也可以使用服务端只接收客户端消息 黏包现象 一、Socket概念 Socket套接字一种独立于协议的网络编程接口就是对网络中不同主机上的应用进程之间进行双向通信的端点。 TCP把连接作为最基本的对象每一条TCP连接都有两个端点这种端点我们叫做套接字(Socket)。 IP层的IP地址可以唯一标示主机而TCP层协议和端口号可以唯一标示主机的一个进程这样我们可以利用IP地址协议端口号唯一标示网络中的一个进程。能够唯一标示网络中的进程后它们就可以利用socket进行通信了 python中我们利用Socket套接字来实现网络通信可以说套接字是实现网络编程进行数据传输的一种技术手段。 Socket用于描述IP地址和端口应用程序通常通过’套接字’相网络发出请求或者应答网络请求。 Socket主要是基于应用层和传输层之间是一个中间的抽象层功能是将复杂的TCP/IP协议族隐藏在Socket接口后面。 应用程序通过套接字发送或接收数据socket模块针对服务器端和客户端Socket进行像对文件一样的打开、读写和关闭等操作。 套接字允许应用程序将I/O插入到网络中并与网络中的其他应用程序进行通信。网络套接字是IP地址与端口的组合。 二、套接字的发展史及分类 套接字起源于 20 世纪 70 年代加利福尼亚大学伯克利分校版本的 Unix,即人们所说的 BSD Unix。 因此,有时人们也把套接字称为“伯克利套接字”或“BSD 套接字”。一开始,套接字被设计用在同 一台主机上多个应用程序之间的通讯。这也被称进程间通讯,或 IPC。套接字有两种或者称为有两个种族,分别是基于文件型的和基于网络型的。 基于文件类型的套接字家族 套接字家族的名字AF_UNIX unix一切皆文件基于文件的套接字调用的就是底层的文件系统来取数据两个套接字进程运行在同一机器可以通过访问同一个文件系统间接完成通信 基于网络类型的套接字家族 套接字家族的名字AF_INET (还有AF_INET6被用于ipv6还有一些其他的地址家族不过他们要么是只用于某个平台要么就是已经被废弃或者是很少被使用或者是根本没有实现所有地址家族中AF_INET是使用最广泛的一个python支持很多种地址家族但是由于我们只关心网络编程所以大部分时候我么只使用AF_INET) 三、Socket的使用 通过指定地址簇和socket类型来进行创建。 地址簇描述Socket.AF_UNIX只能够用于单一的Unix系统进程间通信Socket.AF_INET服务器之间网络通信IPv4Socket.AF_INET6IPv6 Socket类型描述Socket.SOCK_STREAM流式socketfor TCPSocket.SOCK_DGRAM数据报式socketfor UDPSocket.SOCK_RAW原始套接字普通的套接字无法处理ICMP、IGMP等网络报文而SOCK_RAW也可以处理特殊的IPv4报文此外利用原始套接字可以通过IP_HDRINCL套接字选项由用户构造IP头。 服务器与客户端交互过程 语法格式(基于TCP协议) 服务端import socket 基于TCP协议的套接字(Socket)编程 以后养成一个查看源码编写代码的思路!!!!服务端比客户端先运行服务端先运行然后等待客户端连接# 1.产生一个socket对象并指定采用的通信版本和协议(括号内不写默认就是TCP协议) server socket.socket(familysocket.AF_INET, typesocket.SOCK_STREAM)AF_INET, typeSOCK_STREAM AF_INET, typeSOCK_DGRAM 基于TCP协议 基于UDP协议 # 2.绑定IP地址(ip)和端口号(port)需要用元组的形式 def bind(self, __address: _Address | bytes) - None: ... # 绑定的IP地址可以省略代表绑定本机第一个参数为ip地址第二个参数为端口号 server.bind((127.0.0.1, 8000)) 127.0.0.1为本地回环地址只有自己电脑可以访问# 3.服务器做监听也称为半连接池(需要用int类型服务器能够同时等待客户端的数量)排队数量不包含正在执行的def listen(self, __backlog: int ...) - None: ... # listen有一个参数是一个数值参数越大以后可以连接的客户端越多参数越小链接的客户端越小 server.listen(3) print(form Listen)# 4.等待接收客户端的连接请求 三次握手 sock, addr server.accept() # return sock,addr # 运行到这里会等待客户端发送信息才继续下面的运行 sock就是双向通道addr就是客户端地址 print(等待完成)# 5.接收客户端发送过来的消息,(接收到的类型是bytes类型二进制的) def recv(self, __bufsize: int, __flags: int ...) - bytes: ... data sock.recv(1024) # 括号内代表的是一次接收最多1024个字节 recv()接收 send()发送 print(接收到了客户端的数据,data)# 6.给客户端发送消息注意消息必须是bytes类型的 sock.send(data.upper()) # 我这里就只是给客户端发送的消息转成大写# 7.关闭双向通道 四次挥手 sock.close()# 8.关闭服务器 server.close()print()客户端 import socket 运行程序时一定要确保先运行了服务器之后才是客户端 # 1.生成socket对象指定类型和协议 client1 socket.socket(familysocket.AF_INET, typesocket.SOCK_STREAM)# 2.通过IP地址和端口号连接服务端 def connect(self, __address: _Address | bytes) - None: ... client1.connect((127.0.0.1, 8000))# 3.直接给服务端发送消息 client1.send(hello world.encode(utf-8))# 4.接收服务端发送过来的消息 data client1.recv(1024) print(收到服务端发来的消息, data.decode(utf-8))# 5.断开与服务端的链接 client1.close()1.基于TCP协议的套接字(socket)编程 TCPTransmission Control Protocol可靠的、面向连接的协议eg:打电话、传输效率低全双工通信发送缓存接收缓存、面向字节流。使用TCP的应用Web浏览器电子邮件、文件传输程序。 服务端 import socket# 生成一个socket对象设定类型和协议 server1 socket.socket(familysocket.AF_INET, typesocket.SOCK_STREAM)# 为socket设置IP地址端口号 server1.bind((127.0.0.1, 8080))# 给服务器添加同时监听几个客户端, server1.listen(3)while True:# 等待客户端发来消息sock, addr server1.accept()# sock双向通道addr客户端地址while True:try:# 避免用户断开后直接报错自动捕获异常# 接收客户端发来的消息 二进制data sock.recv(2048)print(接收到了客户端发来的消息, data.decode(utf-8))# 给客户端回复消息mag input(请输入回复的消息:).strip()sock.send(mag.encode(utf-8))except Exception as f:print(f)break# 关闭双向通道 sock.close()# 断开服务器链接 server1.close()客户端 import socket# 生成一个socket对象设置类型和协议 client4 socket.socket(family socket.AF_INET,typesocket.SOCK_STREAM)# 连接到服务器 client4.connect((127.0.0.1,8080))while True:# 向服务器发送消息mag input(请输入发送的消息:).strip()if len(mag) 0:print(请输入有效信息)continueif mag yes:print(已断开与服务器连接)breakclient4.send(mag.encode(utf-8)) # 转码# 接收服务器回应的消息 字节data client4.recv(2048)print(接收到了服务器发来的消息:,data.decode(utf-8)) # 解码print(是否不在回复断开连接请输入yes即可)# 断开连接 client4.close()有时候我们在重启服务端时会出现端口被占用的情况。这是因为虽然连接已经关闭但是端口还没来得及释放。 两种解决方案 * 更换端口。 * bind绑定IP之前添加一个参数来达到端口复用的目的。 import osserver socket.socket(familysocket.AF_INET,typesocket.SOCK_STREAM)server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)# 绑定ip地址和端口127.0.0.1代表回环地址只能当前计算机访问 server.bind((127.0.0.1,8080))半连接池 半连接池server.listen(5)意思就是同时可以运行五个客户端 如果多于五个则会报错需要等待前面五个客户端其中一个结束 则会有多余的位置给到第六个2.基于UDP协议的套接字(socket)编程 UDPUser Datagram Protocol不可靠的、无连接的服务传输效率高发送前时延小一对一、一对多、多对一、多对多、面向报文尽最大努力服务无拥塞控制。使用UDP的应用域名系统 (DNS)视频流IP语音(VoIP)。 udp是无连接的所以发送数据前不需要先建立连接。 我们可以使用多个客户端与服务端进行数据发送服务端可以逐个回复 udp发送数据采用的是数据报模式数据会一次性全部发过去如果未接收到也不会保存安全性没有保障但传输速率较快。 服务端 import socket 基于UDP协议的套接字(socket)编程# 生成一个socket对象 设置类型和协议 server socket.socket(family socket.AF_INET,type socket.SOCK_DGRAM) 这里因为要设置成UDP协议所以type socket.SOCK_DGRAM# 设置服务器IP地址及端口号 server.bind((127.0.0.1,8848))while True:# 接受客户端发送来的信息以及发送者的ip以及端口(UDP不需要建立连接)data,addr server.recvfrom(2048)print(f收到客户端{addr}发来的消息,data.decode(utf-8))# 向发送者回复信息mag input(请输入回复的消息:).strip()server.sendto(mag.encode(utf-8), addr)客户端 import socket# 生成一个socket对象 设置类型和协议 client socket.socket(family socket.AF_INET,type socket.SOCK_DGRAM)server_ip (127.0.0.1,8848) # 写好的ip地址和端口 # 无需和服务端建立连接while True:mag input(请输入发送的消息:).strip()# 无需判断是否为空因为UDP每次发送都不只是单纯的数据还有ip和端口信息# 直接向写好的ip和端口发送数据client.sendto(mag.encode(utf-8),server_ip)# 接收它的返回值data,addr client.recvfrom(2048)print(f接收到了{addr}的消息,data.decode(utf-8))也可以使用服务端只接收客户端消息 服务端 import socket server socket.socket(family socket.AF_INET,type socket.SOCK_DGRAM)server.bind((127.0.0.1,8888))# 无需建立连接while True:data,addr server.recvfrom(2048)print(f接收到了发送者{addr}发来的消息:,data.decode(utf-8))客户端 import socketclient socket.socket(family socket.AF_INET,type socket.SOCK_DGRAM)# 无需建立连接while True:# 直接给对应的ip地址和端口号发送信息mag input(请输入发送的消息:).strip()client.sendto(mag.encode(utf-8),(127.0.0.1,8888))黏包现象 1.服务端连续执行三次recv2.客户端连续执行三次send问题:服务端一次性接收到了客户端三次的消息 该现象称为黏包现象黏包现象产生的原因1.不知道每次的数据到底多大2.TCP也称为流式协议:数据像水流一样绵绵不绝没有间隔(TCP会针对数据量较小且发送间隔较短的多条数据一次性合并打包发送)避免黏包现象的核心思路\关键点如何明确即将接收的数据具体有多大ps:如何将长度变化的数据全部制作成固定长度的数据
http://www.yayakq.cn/news/4256/

相关文章:

  • 做行业导航网站七牛 wordpress 视频处理
  • flash网站源文件下载wordpress用阿里云图床
  • 网站域名注册后怎么建设wordpress主题页面底部编辑
  • 网站建设费维护费自助建设视频网站
  • 河南省建设工程网站科技馆网站建设方案
  • 做外链哪个网站好专业网站设计是什么
  • 官方网站数据如何做脚注随州网站制作价格
  • 北京做手机网站的公司套模板网站价格表
  • 网站改域名备案做网站需要用到哪些开发软件
  • 郑州公司网站制作兼职做网站编辑
  • 视觉传达设计网站山西seo和网络推广
  • 寻找网站开发信息查询系统
  • 网站镜像怎么做网站建设合同的主要内容
  • 网站建设的重点营销型网站建设的原则
  • 宣城市建设监督管理局网站下载wordpress前段会员中心
  • 做地接的网站代账公司如何拉客户
  • 网站安全建设工作总结宁波网站设计价格
  • 网站上怎样做轮播图把wordpress装进app
  • 太原市建设银行网站网站后台排版工具
  • 什么是营销型网站建设wordpress英文插件
  • 山东省交通运输厅网站开发单位赣州广播电视台
  • 公司网站导航栏是什么电子邮箱怎么申请
  • 一般网站的字体大小品牌建设的最高境界
  • 广州网站优化指导网络营销渠道策略分析
  • 东阳住房和城市建设网站中体建设集团门户登录
  • 仿购物网站目录wordpress去掉父分类
  • 租用网站服务器深圳网站定制开发
  • asp医院网站源码破解版地方门户cms
  • 如何解决网站只收录首页的一些办法上海建设网站是国家级吗
  • 甘肃省住房和建设厅官方网站wordpress调用单页