zoukankan      html  css  js  c++  java
  • 网络编程之模块socket

    模块socket

    模块urllib和urllib2

    其他模块

    Python 提供了强大的网络编程支持,有很多库实现了常见的网络协议以及基于这些协议的抽象层,让你能够专注于程序的逻辑。而无需关注线路来传输比特的问题。

    模块socket

    网络编程中的一个基本组件就是套接字(socket)。套接字基本上就是一个信息通道,两端各有一个程序,这些程序可能位于(通过网络相连的)不同的计算机上,通过套接字向对方发送信息。

    在python中,大多数网络编程都隐藏了模块socket的基本工作原理,不与套接字直接交互。

    套接字分两类,服务器套接字和客户端套接字。创建服务器套接字后,让它等待链接请求的到来。这样,它将在某个网络地址(由IP地址和端口号组成)处监听,直到客户端套接字建立链接。随后,客户端就可以和服务器通信了。

    客户端套接字处理起来通常比服务器端套接字容易些,因为服务器必须准备随时处理客户端链接,还必须处理多个链接;而客户端只需要链接,链接完成任务后再断开链接即可。

    套接字是模块socket中socket类的实例。

    实例化套接字最多可指定三个参数:

      1.地址族,默认为 socket.AF_INET

      2.流套接字,socket.SOCK_STREAM,默认设置

      3.数据报套接字,socket.SOCK_DGRAM

    协议使用默认值0即可。创建普通套接字时,不用提供任何参数

    为传输数据,套接字提供了两种方法,send和recv(表示receive)。要发送数据,可调用方法send并提供一个字符串;要接收数据,可调用recv并指定最多接收多少个字节的数据。如果不确定该指定什么数字,1024是个不错的选择。

    案例:

    如下两则代码清单展示了 最简单的客户端程序和服务器程序。如果在同一台机器上运行他们(需要先运行服务器程序),服务器程序将打印一条收到连接请求的信息,然后客户端程序将打印它从服务器那里收到的消息。

    在服务器还在运行时,可运行多个客户端。在客户端程序中,通过将gethostname调用替换为服务器机器的主机名,可分别在两台通过网络连接的机器上运行这两个程序。

    #最简单的服务器
    import socket
    s = socket.socket()
    
    host = socket.gethostname()
    port = 1234
    s.bind((host,port))
    
    s.listen(5)
    while True:
    
    c,add = s.accept()
    print('Got connection from',addr)
    c.send('Thank you for connecting')
    c.close()
    #最简单的客户端
    import socket 
    s = socket.socket()
    
    host = socket.gethostname()
    port = 1234
    
    s.connect((host,port))
    print(s.recv(1024))

    注意:

    可使用的端口号通常受到限制。在linux或UNIX系统中,需要有管理员权限才能使用1024一下的端口号。这些编号较小的端口是供标准服务使用的。例如,端口80供web服务器使用。另外,使用ctrl+c停止服务器后,可能需要等待一段时间才能使用该服务器原来使用的端口(否则,可能出现“地址已被占用”错误消息) 

  • 相关阅读:
    图形化编程娱乐于教,Kittenblock arduino实例解读,红外线接收
    图形化编程娱乐于教,Kittenblock arduino实例解读,红外线发送
    图形化编程娱乐于教,Kittenblock arduino实例解读,红外线发送
    图形化编程娱乐于教,Kittenblock arduino实例解读,红外线发送
    图形化编程娱乐于教,Kittenblock arduino实例,液晶屏显示
    图形化编程娱乐于教,Kittenblock arduino实例,数码管计时器
    图形化编程娱乐于教,Kittenblock arduino实例,超声波测距
    超级简单的Android Studio jni 实现(无需命令行)
    实现ViewPager懒加载的三种方法
    MySQL安装
  • 原文地址:https://www.cnblogs.com/FlameLuo/p/9683541.html
Copyright © 2011-2022 走看看