zoukankan      html  css  js  c++  java
  • 兄弟连学python---Socket介绍

    UDP协议

    UDP:用户数据报协议,不可靠性,只是把应用程序传给IP层数据报送出去,但是不能保证他们是否能到达目的地,传输数据报钱不用再客户端和服务器之间建立连接,并且没有超时重发机制,所以传输速度快。

    UDP特点

    -安全性差不稳定,没有顺序, 大小限制64KB内 -速度快

    TCP协议

    tcp通信,再通讯之前,一定要先建立相关链接,才能发送数据

    三次握手

    第一次握手:主机A发送位码为syn=1,随机产生seq number=1234567的数据包到服务器,主机B由SYN=1知道,A要求建立联机;
    
    第二次握手:主机B收到请求后要确认联机信息,向A发送ack number=(主机A的seq+1),syn=1,ack=1,随机产生seq=7654321的包
    
    第三次握手:主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,主机A会再发送ack number=(主机B的seq+1),ack=1,主机B收到后确认seq值与ack=1则连接建立成功。
    
    完成三次握手,主机A与主机B开始传送数据。


    标志控制

    ACK:确认标志
    SYN:同步标志
    FIN:结束标志


    TCP特点

    • 安全性高,稳定性好,有序
    • 速度相对较慢

    什么是Socket

    socket(简称 套接字)是一个网络通信的端点,它能实现不同主机间的进程通信,我们网络上各种各样大多数都是基于Socket来完成的通讯

    网络中进程之间如何通讯呢

    首要解决的问题是如何确定你要和对方电脑上哪个进程进行通讯

    利用协议,IP地址,端口标识网络的进程,然后通着这些标识进行通讯

    socket--UDP网络通讯

    使用socket创建UDP通讯的过程很简单,如下图:

    1.创建套接字
    2.绑定
    3.接收消息
    4.回复消息
    5.关闭套接字
    
    import socket

     1 # 1.创建套接字
     2 udp_socket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
     3 
     4 # 2.绑定端口
     5 udp_socket.bind(('',7852))
     6 
     7 # 3.接收消息
     8 data,addr=udp_socket.recvfrom(1024)
     9 print('>>:'+(data.decode('utf-8')))
    10 
    11 # 4.返回消息
    12 udp_socket.sendto(senInput.encode('utf-8'),addr)
    13 
    14 # 5.关闭套接字
    15 udp_socket.close()
    16 客户端
    17 
    18 1.创建套接字
    19 2.发送数据
    20 3.接收
    21 4.关闭套接字
    22 
    23 import socket
    24 # 1.创建套接字
    25 udp_socket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    26 
    27 # 2.发送消息
    28 data = "你吃了吗"
    29 udp_socket.sendto(data.encode('utf-8'),('192.168.194.1',7852))
    30 
    31 # 3.接收服务器返回的消息
    32 data,addr=udp_socket.recvfrom(1024)
    33 print(data.decode('utf-8'))
    34 
    35 # 4.关闭套接字
    36 udp_socket.close()

    Socket--TCP网络通讯

    TCP通讯过程

    服务端

    1.创建套接字
    2.绑定
    3.监听
    4.接收
    5.关闭套接字


      1 import socket
      2 
      3 # 1.创建
      4 tcp_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
      5 
      6 # 2.bind()绑定
      7 tcp_socket.bind(('',7852))
      8 
      9 # 3.listen()监听
     10 tcp_socket.listen()
     11 
     12 # 4.accept()接受数据
     13 s,addr=tcp_socket.accept()
     14 data=s.recv(1024)
     15 print(data.decode('utf-8'))
     16 
     17 # 5.关闭
     18 s.close()
     19 tcp_socket.close()
     20 客户端
     21 
     22 1.创建
     23 2.connect()连接
     24 3.发送
     25 4.关闭套接字
     26 
     27 import socket
     28 
     29 # 1.创建套接字
     30 tcp_cocket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
     31 
     32 # 2.建立连接
     33 tcp_cocket.connect(('192.168.194.1',7852))
     34 
     35 # 3.发送数据
     36 tcp_cocket.send('吃了吗'.encode('utf-8'))
     37 
     38 # 4.关闭套接字
     39 tcp_cocket.close()
     40 使用Socket--udp实现简单的聊天软件
     41 
     42 服务端
     43 
     44 import socket
     45 from threading import Thread
     46 
     47 # 定义处理接受消息的线程
     48 def recfunc():
     49     global addr
     50     data,addr=s_udp.recvfrom(1024)
     51     print('>>:'+(data.decode('utf-8')))
     52 
     53 # 定义处理发送消息的线程
     54 def sendfunc():
     55     dataInput=input('<<:')
     56     s_udp.sendto(dataInput.encode('utf-8'),addr)
     57 s_udp = None
     58 addr =None
     59 
     60 # 定义主函数功能
     61 def min():
     62     global s_udp
     63     s_udp=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
     64     s_udp.bind(('',8752))
     65 
     66     while True:
     67         hr = Thread(target=recfunc())
     68         hs = Thread(target=sendfunc())
     69 
     70         hr.start()
     71         hs.start()
     72 
     73         hr.join()
     74         hs.join()
     75     s_udp.close()
     76 
     77 
     78 min()
     79 客户端
     80 
     81 import socket
     82 from threading import Thread
     83 
     84 
     85 # 1.收数据,打印
     86 def recData():
     87     while True:
     88         data,addr=udpsocket.recvfrom(1024)
     89         print('>>'+(data.decode('utf-8')))
     90 
     91 # 2.发数据
     92 def sendData():
     93     while Thread:
     94         senInput=input('<<:')
     95         udpsocket.sendto(senInput.encode('utf-8'),(destIp,destPort))
     96 udpsocket = None
     97 destIp = ''
     98 destPort = 0
     99 def min():
    100     global udpsocket
    101     global destIp
    102     global destPort
    103     destIp = input('对方的IP:')
    104     destPort=int(input('对方的端口号:'))
    105     udpsocket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    106     udpsocket.bind(('',7853))
    107 
    108     tr = Thread(target=recData)
    109     th = Thread(target=sendData)
    110 
    111     tr.start()
    112     th.start()
    113 
    114     tr.join()
    115     th.join()
    116     udpsocket.close()
    117 
    118 min()



  • 相关阅读:
    缓存服务器
    Consistent Hashing算法-搜索/负载均衡
    MinHash算法-复杂度待整理
    搜索引擎spam
    C语言字节对齐
    关于访问权限的问题
    计蒜客button 概率
    LightOJ
    LightOJ
    LightOJ
  • 原文地址:https://www.cnblogs.com/kelelaoshi/p/8053262.html
Copyright © 2011-2022 走看看