zoukankan      html  css  js  c++  java
  • Day34

    Socket

    基于TCP的socket

    client端

    import socket
    sk=sk.socket.socket()
    sk.connect(('127.0.0.1',9000))
    while True:
        inp=input(">>>")
        sk.send(inp.encode('utf-8'))
        if inp=='q':break
        ret=sk.recv(1024).decode('utf-8')
        if ret=='q':break
        print(ret)
    sk.close()
    View Code

    server端

    import socket
    sk=sk.socket.socket()
    sk.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEDDR,1)
    sk.bind(('127.0.0.1',9000))
    sk.listen()        #参数n表示同一时间可以有n个链接等待与server端通信
    while True:
        conn,addr=sk.accept()
        while True:
            ret=conn.recv(1024).decode('utf-8')
            if ret=='q':break
            print(ret)
            inp=input('>>>')
            conn.send(inp.encode('utf-8'))
            if inp=='q':break
        conn.close()
    sk.close()
    # tcp协议适用于 文件的上传和下载 发送邮件 发送重要的文件
    # 每和一个客户端建立链接 都会在自己的操作系统上占用一个资源
    # 同一时间 只能 和一个客户端通信
    View Code

    基于UDP的socket

    client端

    import socket
    sk=socket.socket(type=socket.SOCK_DGRAM)
    name=input('name:')
    while True:
        inp=input('>>>')
        sk.sendto(('%s:%s'%(name,inp)).encode('utf-8'),('127.0.0.1',9090))
        msg,addr=sk.recvfrom(1024)
        print(msg.decode('utf-8'))
    sk.close()
    View Code

    server端

    import socket
    lst={'egon':'33[1;31m','yuan':'33[1;34m'}
    sk=socket.socket(type=socket_DGRAM)
    sk.bind(('127.0.0.1',9090))
    while True:
        msg,client_addr=sk.recvfrom(1024)
        name,msg=msg.decode('utf-8').spilt(':')
        color=lst.get(name.strip(),'')
        print('%s%s33[0m'%(color,msg.decode('utf-8')))
        inp=input('>>>')
        sk.sendto(inp.encode('utf-8'),client_addr)
    sk.close()
    View Code

    UDP进阶

    mysocket

    from socket import *
    class Mysocket(socket):
        def __init__(self,coding='utf-8'):
            super().__init__(type=SOCK_DGRAM)
            self.coding=coding
        def my_recv(self,num):
            msg,addr=self.recvfrom(num)
            return msg.decode(self.coding),addr
        def my_send(self,msg,addr):
            return self.sendto(msg.encode(self.coding),addr)
    View Code

    client端

    from mysocket import Mysocket
    
    sk = Mysocket()
    while True:
        inp = input('>>>')
        if inp == 'q':break
        sk.my_send(inp,('127.0.0.1',9090))
        msg,addr = sk.my_recv(1024)
        if msg == 'q':break
        print(msg)
    
    sk.close()
    View Code

    server端

    from mysocket import Mysocket
    
    sk = Mysocket()
    sk.bind(('127.0.0.1',9090))
    while True:
        msg,client_addr= sk.my_recv(1024)   # udp协议不用建立链接
        print(msg)
        inp = input('>>>')
        sk.my_send(inp,client_addr)
    sk.close()
    View Code

    时间同步

    client端

    import time
    import socket
    sk=socket.socket(type=socket.SOCK_DGRAM)
    while True:
        sk.sendto('%Y/%m/%d %H:%M:%S'.encode('utf-8'),('127.0.0.1',9090))
        ret,addr=sk.recvfrom(1024)
        print(ret.decode('utf-8'))
        time.sleep(1)
    sk.close()
    View Code

    server端

    # 时间同步服务
    # udp协议完成的
    # 4、5 台机器
    # 00:00 从一个文件里 读一些数据 明天的搜索
    # 在一个机房里 有一台标准时间的服务器
    # 机房里所有的机器 都每隔一段时间 就去请求这台服务器 来获取一个标准时间
    import time
    import socket
    sk=socket.socket(type=socket.SOCK_DGRAM)
    sk.bind(('127.0.0.1',9090))
    while True:
        msg,addr=sk.recvfrom(1024)
        sk.sendto(time.strftime(msg.decode('utf-8')).encode('utf-8'),addr)
    sk.close()
    View Code
  • 相关阅读:
    海康:无法获取未定义或 null 引用的属性“HWP_***
    mariadb:审计插件
    海康:函数执行结果后以XML方式返回
    海康:java sdk 自定义方法与结构体
    websocket:SecurityError5022
    Java中使用DecimalFormat保留两位小数,同时不保留0
    浅谈js作用域与闭包
    [Go] 分析proto序列化每个字段大小
    MySQL 的全文索引.
    带你了解webpack的使用
  • 原文地址:https://www.cnblogs.com/a352735549/p/8990788.html
Copyright © 2011-2022 走看看