zoukankan      html  css  js  c++  java
  • 套接字

    套接字

    返回首页

    客户端/服务器架构

    Server端:

      1、要一直提供服务。

      2、要绑定一个唯一的地址,让客户端能都明确的找到。

    基于网络通讯的套接字分为TCP协议工作的和UDP协议工作的。

    TCP协议工作:

    服务端:

    import socket
    phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #买手机 AF_INET基于网络通讯的套接字,SOCK_STREAM基于TCP协议的套接字
    phone.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) #就是它,在bind前加,SO_REUSEADDR是重置
    phone.bind(('127.0.0.1',8080)) #绑定手机卡,服务端ip
    
    phone.listen(5) #开机  ?5
    print('starting....')
    
    while True: #链接循环
        conn,addr=phone.accept() #等待电话链接
        print('电话线路是',conn)
        print('客户端的手机号是',addr)
    
        while True: #通信循环
            try: #应对windows系统
                data=conn.recv(1024) #收消息  ?1024
                if not data:break #linux系统
                print('客户端发来的消息是',data)
                conn.send(data.upper()) #发给客户端的消息
            except Exception:
                break
        conn.close()
    
    phone.close()

    客户端

    import socket
    phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    phone.connect(('127.0.0.1',8080))
    
    while True: #通信循环
        msg=input('>>: ').strip()
        if not msg:continue
        phone.send(msg.encode('utf-8'))  #发送的
        print('has send===========>',msg)
        data=phone.recv(1024) #收到的
        print('has recv===========>',data)
        print(data)
    
    phone.close()

    UDP协议工作的套接字:

      UDP用户数据报协议,是无连接的,面向消息的,提供高效率服务,不会使用块的合并优化算法,由于UDP支持的是一对多的模式,所以接收端的skbuff(套接字缓冲区)采用了链式结构来记录每一个到达的UDP包,在每个UDP包中就有了消息头(消息来源地址,端口等信息),这样,对于接收端来说,就容易进行区分处理了,即面向消息的通信是有消息保护边界的。

    Server端:

    import socket
    
    udpserver=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    udpserver.bind(('127.0.0.1',8080))
    
    while True: #通讯循环
        data,client_addr=udpserver.recvfrom(1024)
        print('======>',data.decode('utf-8'))
        print(client_addr)
        msg=input('>>: ')
        # udpserver.sendto(data.upper(),client_addr)
        udpserver.sendto(msg.encode('utf-8'),client_addr)

    Client端:

    import socket
    
    udpclient=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    
    server_ip_port=('127.0.0.1',8080)
    while True:
        inp=input(">>: ")
        udpclient.sendto(inp.encode('utf-8'),server_ip_port)
    
        data,server_addr=udpclient.recvfrom(1024)
        print(data.decode('utf-8'))

    ---------- END ----------

  • 相关阅读:
    支付宝移动支付开发详细教程服务端采用.net mvc webapi(C#)
    微信移动支付V3开发详细教程服务端采用.net mvc webapi(C#)
    CSS border-radius 圆角
    CSS hack大全&详解(什么是CSS hack)
    一小时搞定DIV+CSS布局-固定页面开度布局
    ASP.NET MVC3开发
    .net mvc页面UI之Jquery博客日历控件
    ASP.NET MVC3开发-数据库篇之CodeFisrt开发(一)
    ASP.NET MVC页面UI之联动下拉选择控件(省、市、县联动选择)
    Jquery文本框值改变事件(支持火狐、ie)
  • 原文地址:https://www.cnblogs.com/george92/p/14864376.html
Copyright © 2011-2022 走看看