网络编程socket

本文介绍了网络编程中的TCP和UDP套接字编程,包括OSI 7层模型、TCP与UDP的特点及套接字的创建、绑定、收发消息等操作。同时,展示了TCP的三次握手和四次挥手过程,并通过实例说明了TCP与UDP在不同场景的应用选择。
摘要由CSDN通过智能技术生成

OSI 7层模型

      7 应用层                各种应用程序 

      6 表示层                数据格式化、数据加密解密、 数据的压缩解压缩

      5 会话层                建立、管理、终止应用之间的会话连接  

      4 传输层                提供端对端的数据服务(可靠或不可靠)

      3 网络层                逻辑寻址;路由选择 

      2 数据链路层          将分组数据封装成帧;

      1 物理层                 在介质上传输比特;提供物理的规约 

TCP/IP 协议

     应用层                     Telnet ,FTP ,SMTP,DNS,HTTP 以及其他应用协议 
     
     传输层                     TCP,UDP 

     网络层                      IP ,ARP,RARP ,ICMP  

     网络接口层               各种通信网络接口(以太网等)(物理网络)

udp套接字特点
1.可能出现数据丢失的情况
2.传输过程简单,实现容易
3.数据以数据包形式表达传输
4.数据传输效率较高

UDP 套接字编程

1. 创建套接字
sockfd = socket.socket(socket_family,socket_type,proto =0 )
功能:创建套接字
参数:socket_family 网络地址类型
AF_INET 表示ipv4
socket_type 套接字类型
SOCK_DGRAM 表示udp 套接字(也叫数据报套接字)
proto 通常为 0 选择子协议
返回值 : 套接字对象

: import socket
udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

2. 绑定地址
sockfd .bind(addr)
功能:绑定本机网络地址
参数:二元组(ip,port) #(“0.0.0.0”,8888) #0.0.0.0 万能地址

                例:格式:udp_socket.bind(("0.0.0.0",8888))
                             或
                               addr=("0.0.0.0",8888)
                              udp_socket.bind(addr)

3. 消息收发
data,addr = sockfd.recvfrom(buffersize)
功能:接收UDP消息
参数:每次最多接收多少字节
返回值: data 接收到的内容
addr 消息发送方地址
n = sockfd.sendto(data,addr)
功能:发送UDP消息
参数:data 发送的内容 bytes格式 #所有网络传输需要bytes字节串
bytes 格式
addr 目标地址
返回值:发送的字节数

4. 关闭套接字
sockfd.close()
功能:关闭套接字


例 1 :
UDP-服务端与客户端 :
------------------------ (服务端)

from socket import *

  # 创建udp的套接字
udp_socket=socket(AF_INET,SOCK_DGRAM)

  # 绑定地址
addr=("0.0.0.0",8888)
udp_socket.bind(addr)

while True:
    # 接收与发送一个消息
    msg,addr=udp_socket.recvfrom(1024)   #如果设置比较小,发送内容比较大就会出现丢包

    # 与客户端约定一个特殊的退出命令
    #    if msg =="##":       一般服务器不退出
    #           break

    print("从网络接收到了:",msg.decode())
    udp_socket.sendto(b"Thanks",addr)  # 发送对应客户端消息

 # 关闭套接字
udp_socket.close()

------------------------(客户端)

from  socket  import *

#服务端地址
ADDR =("10.14.2.27",8888)
#创建udp的套接字 
udp_socket = socket(AF_INET,SOCK_DGRAM)

while True:
     #发数据
    msg = input(">>")
    #客户端结束
    if msg =="##":
        break

    udp_socket.sendto(msg.encode(),ADDR)
    data,addr = udp_socket.recvfrom(1024)
    print("From server:",data.decode())
    
#关闭程序
udp_socket.close()

例 2 接收单词,查询数据库是否查找解释并返回给客户端

------------------------------------服务端 —

from socket import *
import pymysql  

ADDR = ("0.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值