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停止服务器后,可能需要等待一段时间才能使用该服务器原来使用的端口(否则,可能出现“地址已被占用”错误消息) 

  • 相关阅读:
    How to change hostname on SLE
    How to install starDIct on suse OS?
    python logging usage
    How to reset password for unknow root
    How to use wget ?
    How to only capute sub-matched character by grep
    How to inspect who is caller of func and who is the class of instance
    How to use groovy script on jenkins
    Vim ide for shell development
    linux高性能服务器编程 (二) --IP协议详解
  • 原文地址:https://www.cnblogs.com/FlameLuo/p/9683541.html
Copyright © 2011-2022 走看看