zoukankan      html  css  js  c++  java
  • Python学习笔记(二)网络编程的简单示例

    Python中的网络编程比C语言中要简洁很多,毕竟封装了大量的细节。

    所以这里不再介绍网络编程的基本知识。而且我认为,从Python学习网络编程不是一个明智的选择。

    简单的TCP连接

    服务器代码如下:

    import socket
    from time import ctime
    
    sock = socket.socket()
    sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    sock.bind(('localhost', 9981))
    sock.listen(5)
    
    while True:
        print 'waiting for connection ...'
        peersock, peeraddr = sock.accept()
        print '....connected from:', peeraddr
    
        while True:
            data = peersock.recv(1024)
            if not data:
                break
            peersock.send('[%s] %s' % (ctime(), data))
    
        peersock.close()
    sock.close()

    注意这里设置了地址复用。

    这是一个时间戳服务器,同时server还将用户的输入直接回显过去。

    客户端的代码如下:

    import socket
    
    sock = socket.socket()
    sock.connect(('localhost', 9981))
    
    while True:
        data = raw_input('> ')
        if not data:
            break;
        sock.send(data)
        data = sock.recv(1024)
        if not data:
            break
        print data
    
    sock.close()

    运行两边的代码,这里贴出客户端的运行结果:

    22:56:08 wing@ubuntu python python 2.py                                                1> foo
    [Tue Nov 11 22:56:10 2014] foo
    > bar
    [Tue Nov 11 22:56:12 2014] bar
    >

    简单的UDP连接

    服务器代码如下:

    from socket import *
    from time import ctime
    
    sock = socket(AF_INET, SOCK_DGRAM)
    sock.bind(('localhost', 9981))
    
    while True:
        print 'waiting for message ...'
        data, addr = sock.recvfrom(1024)
        sock.sendto('[%s] %s' % (ctime(), data), addr)
        print '...received from and returned to:', addr
    
    sock.close()

    客户端代码如下:

    from socket import *
    
    addr = ('localhost', 9981)
    sock = socket(AF_INET, SOCK_DGRAM)
    
    while True:
        data = raw_input('> ')
        if not data:
            break;
        sock.sendto(data, addr)
        data, addr = sock.recvfrom(1024)
        if not data:
            break
        print data
    
    sock.close()

    Python中还提供了其他一系列的高级组件,例如TcpServer、ForkingTcpServer和ThreadingTCPServer等,后面会写一篇文章,总结各种网络编程的模型,到时候再去介绍。

  • 相关阅读:
    BZOJ3197:[SDOI2013]刺客信条——题解
    C 程序与 C++ 程序之间的相互调用
    使用Dev C++调试(debug)程序
    ARM 汇编指令 ADR 与 LDR 使用
    华为交换机以 LACP 模式实现链路聚合
    DLCI 简介
    华为路由器帧中继 FR 实验
    GVRP 的工作机制和工作模式
    华为路由器 HDLC 实验
    华为路由器 IPSec 与 GRE 结合实验
  • 原文地址:https://www.cnblogs.com/inevermore/p/4092341.html
Copyright © 2011-2022 走看看