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

    socket


    • socket是把TCP/IP UDP做一个封装,send,recv...

    • 网络协议基于socket,进行收发等动作

    服务端

    1. 声明实例
      server = socket.socket(AF.INET,sock.SOCK_STREAM)
    • family address 地址簇

    AF.INET IPV4(默认)
    AF.INET6 IPV6
    AF.UNIT local

    • 类型

    socket.SOCK_STREAM  流式socket , for TCP (默认)
    socket.SOCK_DGRAM   数据报式socket , for UDP
    socket.SOCK_RAW 原始套接字,普通的套接字无法处理ICMP、IGMP等网络报文,而SOCK_RAW可以;其次,SOCK_RAW也可以处理特殊的IPv4报文;此外,利用原始套接字,可以通过IP_HDRINCL套接字选项由用户构造IP头。
    socket.SOCK_RDM 是一种可靠的UDP形式,即保证交付数据报但不保证顺序。SOCK_RAM用来提供对原始协议的低级访问,在需要执行某些特殊操作时使用,如发送ICMP报文。SOCK_RAM通常仅限于高级用户或管理员运行的程序使用。
    socket.SOCK_SEQPACKET 可靠的连续数据包服务

    1. 绑定地址
      server.bind(localhost,port)
    2. 开始监听
      server.listen()
    3. 获取连接
      conn,addr = server.accept()#阻塞,为进来的连接创建一个实例conn
      5 .接收回复
    while True:
        print('new conn',addr)
        #接收数据
        data = conn.recv(1024)#官方建议最大8192
        #recv默认是阻塞的
        #回复数据
        conn.send(b'recv data')#回复二进制数据
    
    • 客户端断开,conn.recv收到的就是控数据,进入死循环,因此:
    while True:
        print('new conn',addr)
        #接收数据
        data = conn.recv(1024)#官方建议最大8192
        #recv默认是阻塞的
        if not data: #<----判断是否为空,标识是否断开
            break
        #回复数据
        conn.send(b'recv data')#回复二进制数据
    

    客户端client

    1. 实例化 client = socket.socket()
    2. 连接 client.connect(serverip,port)
    3. 发送数据client.send()
    4. 收服务器回复client.recv()
  • 相关阅读:
    [原]实例-简单设计&精简代码&复用代码
    [原创]实例-少用单例及降低耦合
    c#实现数据集合转换为csv文本
    [转]SqlServer索引的原理与应用
    [转]AngularJS:何时应该使用Directive、Controller、Service?
    [转]AngularJS移动开发中的坑汇总
    [转]Hibernate对象的三种状态
    [转]AngularJS Cookies Example
    [转]LESS CSS 框架简介
    [转]为ReportViewer导出的PDF文档加上水印
  • 原文地址:https://www.cnblogs.com/limich/p/7477041.html
Copyright © 2011-2022 走看看