网络编程-day2

时间:2023-03-08 16:58:50
网络编程-day2

1 网络通信协议

Tcp udp的区别 重点(*****)

TCP(Transmission Control Protocol)可靠的、面向连接的协议(eg:打电话)、传输效率低全双工通信(发送缓存&接收缓存)、面向字节流。使用TCP的应用:Web浏览器;文件传输程序。

UDP(User Datagram Protocol)不可靠的、无连接的服务,传输效率高(发送前时延小),一对一、一对多、多对一、多对多、面向报文(数据包),尽最大努力服务,无拥塞控制。使用UDP的应用:域名系统 (DNS);视频流;IP语音(VoIP)。

直接看图对比其中差异

网络编程-day2

网络编程-day2

Tcp三次握手四次挥手(******)

网络编程-day2

2 tcp udp协议下的socket

基于TCP的socket通讯流程图片:

网络编程-day2

 import socket
 from socket import SOL_SOCKET,SO_REUSEADDR
 sk = socket.socket()
 # sk.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)
 sk.bind(('127.0.0.1',8090))
 sk.listen()
 conn,addr = sk.accept()  #在这阻塞,等待客户端过来连接
 while True:
     ret = conn.recv(1024)  #接收消息  在这还是要阻塞,等待收消息
     ret = ret.decode('utf-8')  #字节类型转换为字符串中文
     print(ret)
     if ret == 'bye':        #如果接到的消息为bye,退出
         break
     msg = input('服务端>>')  #服务端发消息
     conn.send(msg.encode('utf-8'))
     if msg == 'bye':
         break

 conn.close()
 sk.close()

 只能与第一个客户端通信server端代码

server

 import socket
 sk = socket.socket()
 sk.connect(('127.0.0.1',8090)) #连接服务端

 while True:
     msg = input('客户端>>>')  #input阻塞,等待输入内容
     sk.send(msg.encode('utf-8'))
     if msg == 'bye':
         break
     ret = sk.recv(1024)
     ret = ret.decode('utf-8')
     print(ret)
     if ret == 'bye':
         break
 sk.close()

 只能与第一个客户端通信client端代码

client

基于UDP的socket通讯流程:

网络编程-day2

udp_server
 import socket
 ip_port=('127.0.0.1',9000)
 udp_sk=socket.socket(type=socket.SOCK_DGRAM)
 udp_sk.sendto(b'hello',ip_port)
 back_msg,addr=udp_sk.recvfrom(1024)
 print(back_msg.decode('utf-8'),addr)

udp_client