zoukankan      html  css  js  c++  java
  • socket通信,三次握手,四次挥手

    服务端套接字函数

      s.bind() 绑定(主机,端口号)到套接字
      s.listen() 开始TCP监听

        半连接池就是半连接存放位置

        可以设置最大半连接数来防止洪水攻击
      s.accept() 被动接受TCP客户的连接,(阻塞式)等待连接的到来

    客户端套接字函数

      s.connect() 主动初始化TCP服务器连接
      s.connect_ex() connect()函数的扩展版本,出错时返回出错码,而不是抛出异常

    公共套接字函数

      s.recv() 接收TCP数据
      s.send() 发送TCP数据(send在待发送数据量大于己端缓存区剩余空间时,数据丢失,不会发完)
      s.sendall() 发送完整的TCP数据(本质就是循环调用send,sendall在待发送数据量大于己端缓存区剩余空间时,数据不丢失,循环调用send直到发完)
      s.recvfrom() 接收UDP数据
      s.sendto() 发送UDP数据
      s.getpeername() 连接到当前套接字的远端的地址
      s.getsockname() 当前套接字的地址
      s.getsockopt() 返回指定套接字的参数
      s.setsockopt() 设置指定套接字的参数

      s.close() 关闭套接字

     1 #服务端
     2 import socket
     3 
     4 ip_port=('127.0.0.1',9000)      #电话卡
     5 BUFSIZE=1024                    #收发消息的尺寸
     6 s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #买手机
     7 s.bind(ip_port) #手机插卡
     8 s.listen(5)     #手机待机
     9 
    10 conn,addr=s.accept()            #手机接电话
    11 # print(conn)
    12 # print(addr)
    13 print('接到来自%s的电话' %addr[0])
    14 
    15 msg=conn.recv(BUFSIZE)             #听消息,听话
    16 print(msg,type(msg))
    17 
    18 conn.send(msg.upper())          #发消息,说话
    19 
    20 conn.close()                    #挂电话
    21 
    22 s.close()                       #手机关机
    23 
    24 #客户端        
    25 import socket
    26 ip_port=('127.0.0.1',9000)
    27 BUFSIZE=1024
    28 s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    29 
    30 s.connect_ex(ip_port)           #拨电话
    31 
    32 s.send('linhaifeng nb'.encode('utf-8'))         #发消息,说话(只能发送字节类型)
    33 
    34 feedback=s.recv(BUFSIZE)                           #收消息,听话
    35 print(feedback.decode('utf-8'))
    36 
    37 s.close()                                       #挂电话
    TCP通信模板(基础版)
     1 #服务端
     2 import socket
     3 ip_port=('127.0.0.1',8081)#电话卡
     4 BUFSIZE=1024
     5 s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #买手机
     6 s.bind(ip_port) #手机插卡
     7 s.listen(5)     #手机待机
     8 
     9 while True:                         #新增接收链接循环,可以不停的接电话
    10     conn,addr=s.accept()            #手机接电话
    11     # print(conn)
    12     # print(addr)
    13     print('接到来自%s的电话' %addr[0])
    14     while True:                         #新增通信循环,可以不断的通信,收发消息
    15         msg=conn.recv(BUFSIZE)             #听消息,听话
    16 
    17         # if len(msg) == 0:break        #如果不加,那么正在链接的客户端突然断开,recv便不再阻塞,死循环发生
    18 
    19         print(msg,type(msg))
    20 
    21         conn.send(msg.upper())          #发消息,说话
    22 
    23     conn.close()                    #挂电话
    24 
    25 s.close()                       #手机关机
    26 
    27 #客户端
    28 import socket
    29 ip_port=('127.0.0.1',8081)
    30 BUFSIZE=1024
    31 s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    32 
    33 s.connect_ex(ip_port)           #拨电话
    34 
    35 while True:                             #新增通信循环,客户端可以不断发收消息
    36     msg=input('>>: ').strip()
    37     if len(msg) == 0:continue
    38     s.send(msg.encode('utf-8'))         #发消息,说话(只能发送字节类型)
    39 
    40     feedback=s.recv(BUFSIZE)                           #收消息,听话
    41     print(feedback.decode('utf-8'))
    42 
    43 s.close()                                       #挂电话
    TCP通信模板(带循环)
     1 #服务端
     2 import socket
     3 ip_port=('127.0.0.1',9000)
     4 BUFSIZE=1024
     5 udp_server_client=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
     6 
     7 udp_server_client.bind(ip_port)
     8 
     9 while True:
    10     msg,addr=udp_server_client.recvfrom(BUFSIZE)
    11     print(msg,addr)
    12 
    13     udp_server_client.sendto(msg.upper(),addr)
    14 
    15 #客户端
    16 
    17 import socket
    18 ip_port=('127.0.0.1',9000)
    19 BUFSIZE=1024
    20 udp_server_client=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    21 
    22 while True:
    23     msg=input('>>: ').strip()
    24     if not msg:continue
    25 
    26     udp_server_client.sendto(msg.encode('utf-8'),ip_port)
    27 
    28     back_msg,addr=udp_server_client.recvfrom(BUFSIZE)
    29     print(back_msg.decode('utf-8'),addr)
    UDP通信模板)

    三次握手与四次挥手

    TCPsocket链接原理图

    学习,学习,学习! 学习是为了更好的未来,不要让别人瞧不起你,加油!!!
  • 相关阅读:
    Discuz!NT代码阅读笔记(4)一切皆可配置:页面的显示
    WAP网站开发

    Discuz!NT代码阅读笔记(2)网站安装自动化论坛程序安装及初始化过程
    Discuz!NT代码阅读笔记(1)从HttpModule开始
    c#使用Transactions类完成多个数据库的事务操作(分布式事务处理)
    自我介绍 简历
    Discuz!NT 系统架构分析
    缓存应用Memcached分布式缓存简介(二)
    数组类型EDT的元素个数
  • 原文地址:https://www.cnblogs.com/yangyufeng/p/10176478.html
Copyright © 2011-2022 走看看