首页 > 其他分享 >网络通信,基于套接字socket进行通信

网络通信,基于套接字socket进行通信

时间:2023-03-28 18:55:42浏览次数:43  
标签:网络通信 协议 socket TCP phone client 接字 data

1.应用层:

应用层功能:规定应用程序的数据格式。

例:TCP协议可以为各种各样的程序传递数据,比如Email、WWW、FTP等等。那么,必须有不同协议规定电子邮件、网页、FTP数据的格式,这些应用程序协议就构成了”应用层”。


2.传输层:

传输层功能:建立端口到端口的通信

补充:端口范围0-65535,0-1023为系统占用端口

tcp协议:

可靠传输,TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包不必再分割


3.osi七层协议

 


4.TCP三次握手四次挥手:

5 基于套接字通信:

5.1:tcp协议服务端:

'''
服务端应该满足的特点:
1.一直提供服务
2.并发的提供服务
'''


import socket
#1.买手机
# phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #流式协议--> tcp协议
phone = socket.socket() #默认是TCP协议


# 2.绑定手机卡
# 0.0.0.0 ----> 代表允许任何的ip链接
phone.bind(('127.0.0.1',8080))   #ip+端口(0-65535)1024以前的都被系统保留使用


#3.开机  (监听状态)
phone.listen(5)   #5指的是半连接池大小

#4.等待电话连接请求:拿到电话连接conn
#加上链接循环
while True:
   conn,client_addr = phone.accept() #接受,程序启动后,会在accept这里夯住,阻塞
   print(conn)  #连接对象,三次握手的双向通路
   print('客户端的ip和端口:',client_addr)

   while True:
      try:
         #5.通信:收/发消息
         data = conn.recv(1024)  #最大接受的数据量为1024Bytes,收到的是bytes类型
         if len(data) == 0:
            # 针对unix系统里,一旦data收到为空
            # 意味着是一种异常的行为:客户非法断开链接
            break
         print('客户端发来的消息:',data.decode('utf8'))
         conn.send(data.upper())
      except Exception:
         #针对windows系统
         break

   #6.关闭电话连接comm
   conn.close()

#7.关机(可选操作)
# phone.close()

tcp协议客户端:

import socket


#1.买手机       sokcet类      地址家族
phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #流式协议--> tcp协议


#2.拨通服务端电话
phone.connect(('127.0.0.1',8080))  #进行3次握手

while True:
   msg = input('输入要发送的消息:').strip()
   if len(msg) == 0:continue  #解决输入空格的bug
   if msg == 'quit':
      break
   # 3.通信
   phone.send(msg.encode('utf8')) #编码以二进制的形式发送

   data = phone.recv(1024)
   print(data.decode('utf8'))    #解码


#4.关机连接(必选的回收资源的操作)
phone.close()

5.2udp协议服务端(用在对实时性要求很高的程序上面)

import socket
sever = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)  #udp协议


sever.bind(('127.0.0.1',8081))

while True:
   data,client_addr = sever.recvfrom(1024)
   sever.sendto(data.upper(),client_addr)

sever.close()

udp协议客户端

import socket

client = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)  #udp协议
while True:
   msg = input('输入要发送的消息:').strip()
   client.sendto((msg.encode('utf8')),('127.0.0.1',8081))
   res = client.recvfrom(1024)
   print(res)

client.close()

 

 

 

 

 

 

 

 


 

标签:网络通信,协议,socket,TCP,phone,client,接字,data
From: https://www.cnblogs.com/whxx/p/17266336.html

相关文章

  • Tomcat 7的WebSocket实现(上)
    Tomcat7的WebSocket实现(上)作者:chszs,转载需注明。本文覆盖了以下内容:1)Web通信的演进2)WebSocket3)WebSocket在ApacheTomcat7的实现4)怎样用Jaggery开发WebSocket特性Tomcat......
  • 通常每个套接字地址只允许使用一次 未解决
    场景青浦项目,流媒体服务需要绑定10000端口,结果失败,通过排查是被系统进程占用了可以看到wininit.exe进程占用10000,并且10001端口也被svchost.exe占用测试方案采用10002端口,从......
  • WPF中使用ClientWebSocket会和服务器开启一个连接,HttpWebRequest调用服务器接口的时候
    使用ClientWebSocket的时候是通过async/await语法糖来实现同步的异步编程,本质就是Task开启任务,所以是以多线程的形式执行,此时最大的并发连接数就是2或者10个,所以可以代码设......
  • Socket基础三
    1 流程  2 示例看下面一个服务器端的代码:namespaceMyScoketTest{publicpartialclassForm1:Form{publicForm1(){......
  • .Net MVC 实现WebSocket
    WebSocket 1.基于Html5,IIS8.0版本以上,前端代码和服务器都必须支持WebSocket才能使用;2.请求必须以WS:开头下面是后台接收前端websocket申请的方法:///<summary>......
  • laravel-s实现高性能webSocket服务
    laravel-s实现高性能webSocket服务1安装基于LaravelS构建HTTP服务器2在Laravel中集成Swoole实现WebSocket服务器1修改配置文件2创建WebSocketService类3测......
  • Loadrunner运行WebSocket时报错,不能load OpenDB1
    解决办法:方法1、可能是录制的时候,没有用多协议,没有勾选WindowsSocket协议。在这个WebSocketCB.c的文件中加入没有的函数。  方法二、重新录制脚本,选择多协议录制,同时......
  • HTTP协议的瓶颈、WebSocket与HTTP
    影响HTTP网络请求的因素带宽延迟HTTP协议的瓶颈一条连接上只发送一个请求请求只能从客户端开始。客户端不可以接受除响应以外的指令请求/响应头部不经压缩就发送每......
  • Netty中使用WebSocket实现服务端与客户端的长连接通信发送消息
    上面讲了使用使用Socket搭建多客户端的连接与通信。那么如果在Netty中使用WebSocket进行长连接通信要怎么实现。WebSocket现在,很多网站为了实现推送技术,所用的技术都是Ajax......
  • 微信小程序websocket的使用
    微信小程序websocket的使用微信小程序中使用websocket分为两步:一、现在微信公众平台的开发者工具中配置socket的域名   二、开始编写业务代码业务代码大致可以......