socket TCP DPT 网络编程

复习:
ARP协议:
广播和单播
通过ip地址获得mac地址
机器A发起一个arp请求(只包含A的ip地址)
交换机接收到请求,广播这条消息
所有的机器都会接受到这条请求,只有需要寻找的机器B的ip地址才能吻合
并回应交换机的广播(并带上自己的mac地址)
交换机通过单播的形式回复B的mac地址,并发送给A

TCP协议:
面向连接 可靠 全双工
三次握手:建立tcp连接
发数据
四次挥手:断开tcp连接

UDP协议:
无连接 不可靠 速度快
回环ip:
127.0.0.1
0.0.0.0

内容总览:
BS架构
CS架构
socket

BS架构:
brower 与 server
浏览器与服务器

例如:
server brower
博客园,百度,探宝,京东 360浏览器


CS架构:
client 和 server
用户与服务器
也就是说,客户需要安装一个客户端,然后才能与服务器取得联系

例如:

腾讯 qq应用
百度网盘服务器 百度云应用

总结:
BS架构也是CS架构的一种

pc端:
BS架构(浏览器与服务器架构)是一种趋势,统一了程序的入口
手机端:
微信公众号
小程序 都统一了程序的入口

sockst:
中文名字:套接字
这个模块主要是解决了传输层与应用层的链接,分为TCP UDP两种编程模式

TCP:

#server
import socket
    sk = socket.socket()#买手机
    sk.bind(('127.0.0.1',9000))#插手机卡
    sk.listen(5)#开机 5代表最大排队等待人数
    while True:
        try:
            conn,addr = sk.accept()#等电话
            print(conn,addr)#等到了电话 之后的所有信息收发都建立在conn这个连接上
            while True:
                msg_send=input('>>>')
                conn.send(msg_send.encode('utf-8'))
                msg_rec = conn.recv(1024)#这里一定要传入参数,限制最大传入的字节
                print(msg_rec.decode('utf-8'))
        except UnicodeEncodeError:
            pass
    sk.close()#关机

  



#client
 import  socket
    sk = socket.socket()
    sk.connect(('127.0.0.1',9000))
    while True:
        msg_rec = sk.recv(1024)
        print(msg_rec.decode('utf-8'))
        msg = input('>>>')
        sk.send(msg.encode('utf-8'))
    sk.close()

  



UDP协议:


server端:
import  socket
    sk = socket.socket(type=socket.SOCK_DGRAM)
    sk.bind(('127.0.0.1',9000))
    while True:
        msg,addr = sk.recvfrom(1024)
        print(msg.decode('utf-8'))
        if msg == b'q':
            break
        msg_send = input('>>>')
        sk.sendto(msg_send.encode('utf-8'),addr)
        if msg_send == 'q':break

    sk.close()

  



client端:
import socket
    sk = socket.socket(type=socket.SOCK_DGRAM)
    while True:
        msg_send = input('>>>')
        sk.sendto(msg_send.encode('utf-8'),('127.0.0.1',9000))
        if msg_send == 'q':break
        msg_recv,addr = sk.recvfrom(1024)
        if msg_recv == b'q':break
        print(msg_recv.decode('utf-8'))
    sk.close()

  


 
原文地址:https://www.cnblogs.com/cavalier-chen/p/9643344.html