day34

今日内容:

1. TCP半连接池原理

         服务器:

import socket

server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

server.bind(("127.0.0.1",9999))
    不是最大连接数!!!
server.listen(5)

while True:
    c,addr = server.accept()
    while True:
      try:
        msg = c.rcv(1024).decode("utf-8")
        if not msg:
            c.close()
             break
         except BaseException:
             print("客户端异常断开")
             c.close()
             break
 server.close()

  

    客户端:

import socket

client = socket.socket(socket.AF_INET,socket.SICK_STREAM)

client.connect(("127.0.0.1",9999))

while True:
        data = input(">>>:")
         if not data:continue
         client.send(daea.encode("utf-8"))
         msg = client.recv(1024).decode("utf-8")
          print(msg)

client.close()

2.UDP通讯

     服务器2:

import socket

创建socket对象 指定type参数为socket.SOCK_DGRAM 表示使用UDP协议
server = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) datagram数据报的意思
    绑定IP和端口
server.bind(("127.0.0.1",8888))

while True:
     接收数据 返回一个元组 数据和 发送的地址
   msg,c _addr = server.recvfrom(1024)
   print("收到来自%s:说:%s"%(c_addr[0],msg.decode("utf-8")))
         发送数据到指定IP和端口
     server.sendto(msg.upper(),c_addr)

客户端2:

 import socket

client = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) datagram数据报的意思

while True:
   msg = input(">>>:")
   client.sendto(msg.encode("utf-8"),("127.0.0.1",8888))
   data,addr = client.recvfrom(1024)
   print(data.decode("utf-8"))

3.UDP聊天

     服务器:

"""

  群聊思路

     1.客户端先把数据交给服务器

     2.服务器先存储对方的地址

     3.把收到的数据给所有人的发一遍

"""

import socket

server = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

server.bind(("127.0.0.1",8848))


# 如果客户端与服务器在同一台计算机  并且有多个客户端  这些客户端ip都是相同的127.0.01

clients = {}

while True:
    msg,addr = server.recvfrom(1024)

    # 存储对方的地址:
    clients[addr[1]] = addr

    print(msg.decode("utf-8"))
    # 循环发给所有人
    for c in clients:
        # 这个消息不用给发送方发回去
        # if c == addr[1]:
        #     continue
        server.sendto(msg,clients[c])

客户端1:

import socket

c = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

while True:
    msg = input(">>>:")
    c.sendto(msg.encode("utf-8"),"127.0.0.1",8848))
    msg,addr = c.revfrom(1024)
    print(msg.decode("utf-8"))

客户端2:

mport socket

c = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

while True:
    msg = input(">>>:")
    c.sendto(msg.encode("utf-8"),("127.0.0.1",8848))
    msg, addr = c.recvfrom(1024)
    print(msg.decode("utf-8"))

4.UDP聊天2

  发送机:

     

import socket

c = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

while True:
    msg = input(">>>:")
    c.sendto(msg.encode("utf-8"),("127.0.0.1",8848))
    msg, addr = c.recvfrom(1024)
    print(msg.decode("utf-8"))

 服务器:

"""
    群聊思路
        1.客户端先把数据交给服务器
        2.服务器先存储对方的地址
        3.把收到的数据给所有人都发一遍

"""


import socket

server = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

server.bind(("127.0.0.1",8848))


 如果客户端与服务器在同一台计算机  并且有多个客户端  这些客户端ip都是相同的127.0.01

clients = {}

while True:
    msg,addr = server.recvfrom(1024)

     存储对方的地址:
    clients[addr[1]] = addr

    print(msg.decode("utf-8"))
     循环发给所有人
    for c in clients:
         这个消息不用给发送方发回去
         if c == addr[1]:
             continue
        server.sendto(msg,clients[c])

 接收机:

mport socket

c = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# 先随便发一条消息给服务器  让服务知道自己的地址
c.sendto("register".encode("utf-8"),("127.0.0.1",8848))

while True:
    msg, addr = c.recvfrom(1024)
    print(msg.decode("utf-8"))

  今日总结:

 1.TCP模板代码

      半连接池的工资管理

      目前我们的程序是单线程 服务器要么处理通讯要么处理连接请求 无法同时进行

   2.TCP 和 UDP 发送数据时的流程

         解释 为何TCP是可靠的 是因为发送数据后必须收到确认包

 

   3.UOP的目标代码

      与TCP代码的区别

      不需要监听 不需要接收

       type参数为 SOCK_DGRAM

       UDP 可以同时处理多个客户端 是因为CPU处理速度快 给人家感觉是同时处理

转载于:https://www.cnblogs.com/hui2002/p/9916316.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值