Day015 学习笔记

创建Socket:

该函数带有两个参数(参数必须写):

a. AF_INET(ipv4协议⽤于 Internet 进程间通信)

b. 套接字类型, 可以是 SOCK_STREAM(流式套接字, ⽤于TCP 协议) 或者 SOCK_DGRAM(数据报套接字, ⽤于 UDP 协议)


TCP慢但是稳定不会丢数据

UDP快但是可能会丢数据(黑客攻击)


确定了IP地址端口号(ipv4协议),TCP或UDP协议之后,计算机之间可以进行通信

        """ UDP发送数据 """
from socket import *    # 导入套接字模块

s = socket(AF_INET,SOCK_DGRAM)   #创建套接字
addr = ("192.168.42.44",8080)      # 用于接收数据的ip地址,端口号
data = input("请输入要发送的内容:")
s.sendto(data.encode("gb2312"),addr)    # data.encode("gb2312"),data的数据转换为网络调试助手能识别的编码方式
s.sendto(b"abcd",addr)
"""
发送数据时,python3需要将字符串转成byte
encode(‘utf-8’)      # 用utf-8对数据进行编码,获得bytes类型对象
decode()反过来
"""
redata = s.recvfrom(1024)   # 参数 1024 代表本次接收能接收到的最大数据的字节数
print(redata[0].decode("gb2312"))       # redata[0]代表接收到的第一个数据
s.close()
      

作为数据得接收方,需要事先绑定一个端口号: s.band(("IP地址",端口号))

        from socket import *
s = socket(AF_INET,SOCK_DGRAM)
s.bind(("", 8088))      # 用一个元组传入(“ip地址”,端口号),注意:传给本机的时候"ip地址" 可以不用写
s.sendto(b"abc", ("192.168.42.44",8585))  # 对方的地址也是元组表示
#等待接收数据
redata = s.recvfrom(1024)       #1024表示本次接收的最大字节数
print(redata[0].decode())
      

echo 服务器: 接受到什么原封发回

        from socket import  *

udpSock =socket(AF_INET,SOCK_DGRAM)
udpSock.bind(("",8585))

while True:
    recvData = udpSock.recvfrom(1024)
    udpSock.sendto(recvData[0], recvData[1])

udpSock.close()
      

创建聊天室

聊天室 1: 先发后收

        from socket import  *

udpSock =socket(AF_INET,SOCK_DGRAM)
udpSock.bind(("192.168.42.44",8581))

while True:
    data = input("请输入:\n")
    udpSock.sendto(data.encode(), ("192.168.42.44",8580))

    recvData = udpSock.recvfrom(1024)
    print(recvData[0].decode())

udpSock.close()
      

聊天室 2: 先收后发

        from socket import  *

udpSock =socket(AF_INET,SOCK_DGRAM)
udpSock.bind(("192.168.42.44",8580))

while True:
    recvData = udpSock.recvfrom(1024)
    print(recvData[0].decode())
    data = input("请输入:\n")
    udpSock.sendto(data.encode(), ("192.168.42.44",8581))

udpSock.close()
      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值