美文网首页Python学习
python 10 网络编程

python 10 网络编程

作者: 小鱼儿喜欢花无缺 | 来源:发表于2018-01-30 10:09 被阅读11次

    Socket是网络编程的一个抽象概念。通常我们用一个Socket表示“打开了一个网络链接”,而打开一个Socket需要知道目标计算机的IP地址和端口号,再指定协议类型即可。

    客户端

    大多数连接都是可靠的TCP连接。创建TCP连接时,主动发起连接的叫客户端,被动响应连接的叫服务器。

    举个例子,当我们在浏览器中访问新浪时,我们自己的计算机就是客户端,浏览器会主动向新浪的服务器发起连接。如果一切顺利,新浪的服务器接受了我们的连接,一个TCP连接就建立起来的,后面的通信就是发送网页内容了。

    所以,我们要创建一个基于TCP连接的Socket,可以这样做:

    导入socket库:

    import socket

    创建一个socket:

    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    建立连接:

    s.connect(('www.sina.com.cn', 80))

    创建Socket时,AF_INET指定使用IPv4协议,如果要用更先进的IPv6,就指定为AF_INET6。SOCK_STREAM指定使用面向流的TCP协议,这样,一个Socket对象就创建成功,但是还没有建立连接。

    接收数据:

    buffer = []

    while True:

    # 每次最多接收1k字节:
    
    d = s.recv(1024)
    
    if d:
    
        buffer.append(d)
    
    else:
    
        break
    

    data = ''.join(buffer)

    UDP编程

    阅读: 3637


    TCP是建立可靠连接,并且通信双方都可以以流的形式发送数据。相对TCP,UDP则是面向无连接的协议。

    使用UDP协议时,不需要建立连接,只需要知道对方的IP地址和端口号,就可以直接发数据包。但是,能不能到达就不知道了。

    虽然用UDP传输数据不可靠,但它的优点是和TCP比,速度快,对于不要求可靠到达的数据,就可以使用UDP协议。

    我们来看看如何通过UDP协议传输数据。和TCP类似,使用UDP的通信双方也分为客户端和服务器。服务器首先需要绑定端口:

    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    绑定端口:

    s.bind(('127.0.0.1', 9999))

    创建Socket时,SOCK_DGRAM指定了这个Socket的类型是UDP。绑定端口和TCP一样,但是不需要调用listen()方法,而是直接接收来自任何客户端的数据:

    print 'Bind UDP on 9999...'

    while True:

    # 接收数据:
    
    data, addr = s.recvfrom(1024)
    
    print 'Received from %s:%s.' % addr
    
    s.sendto('Hello, %s!' % data, addr)
    

    recvfrom()方法返回数据和客户端的地址与端口,这样,服务器收到数据后,直接调用sendto()就可以把数据用UDP发给客户端。

    相关文章

      网友评论

        本文标题:python 10 网络编程

        本文链接:https://www.haomeiwen.com/subject/gxvqzxtx.html