zoukankan      html  css  js  c++  java
  • 网络编程

    程序之间通讯大致可分为两种:
    CS  应用类:QQ,微信,优酷
    BS  web,浏览器:谷歌,火狐,百度,知乎等

    Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一个组接口。
    在设计在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,
    对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。

    其实站在你的角度看,Socket就是一个模块,我们通过调用模块中已经实现的方法建立两个进程之间的连接和通信。
    也有人将Socket说成IP+Port,因为IP是用来标识互联网中的一台主机的位置,而Port是用来标识这台机器上的一个应用程序,
    所以我们只要确立了IP和Port就能找到一个应用程序,并且使用Socket模块来与之通信。

    TCP是基于链接的,必须先启动服务端,然后在启动客户端去链接服务端
    import socket
    server = socket.socket()    创建socket连接
    server.bind(('192.168.1.77',8001))  绑定IP和端口到套接字
    server.listen(5)        监听数量
    conn,addr = server.accept()  阻塞状态,等待客户端来连接,conn是客户端和服务端连接的对象(相当于介质),服务器以后要通过该对象进行收发数据,addr客户端地址信息
    data = conn.recv(1024)    通过对象获取消息
    print(data)
    conn.send(b'hello')

    conn.close()    关闭连接对象
    server.close()    关闭服务

    import socket
    client = socket.socket()
    client.connect(('192.168.1.77',8001))

    client.send(b'hellooo')  发送

    data = client.recv(1024)
    print(data)
    client.close()


    UDP是无链接的,启动服务之后可以直接接收消息,不需要提前建立连接


    粘包
    什么是粘包
    只有TCP有粘包现象,udp永远不会粘包
    粘包不一定会发生
    如果发生了:1可能是在客户端已经粘了
          2客户端没有粘,可能实在服务单粘了
    情况一:发送方的缓存机制
    发送端需要等缓存区满才发送出去,造成粘包 (发送数据时间间隔很短,数据很小,会合到一起,产生粘包)
    情况二:接收方缓存机制
    接收方不及时接受缓存区的包,,造成多个包接受(客户单发送了一段数据,服务端只收了一小部分,服务端下次再收的时候还是从缓存区拿上次一流的数据,产生粘包)

    server
    import struct
    构建报头
    header_pack = struct.pack("i",len(stdout))
    发送报头
    conn.send(header_pack)
    发送数据
    conn.send(stdout)

    client
    header_pack = client.recv(4)
    data_length = struct.unpack("i",header_pack)[0]

    recv_data_length = 0
    recv_data = b""
    while recv_data_length < data_length:
      data = client.recv(1024)
      recv_data_length += len(data)
      recv_dara += data
    print(recv_data.decode("gbk"))






      

  • 相关阅读:
    变色龙
    生在北极圈内的“瑞典之声”Sofia Jannok
    “清一色”数列1,11,111,1111,...
    1100 10100 PAGE ERROR
    The Lazarus Project
    数字“黑洞”495
    don't you forget the EXIF~!
    行和列
    小谈奇数平方与偶数平方
    “码农”的得力工具math
  • 原文地址:https://www.cnblogs.com/nice777/p/11067317.html
Copyright © 2011-2022 走看看