python 网络编程1

首先,必须先有网络的基础,这点必须有,不然你碰到什么问题,都不知道自己做错了什么。

我花了3天看了:http://tieba.baidu.com/p/1842861503?fr=ala0&alath=2&pstbala=1

后来又看了ccna的培训视频,不能说全懂,但起码对网络有了大概的基础。


言归正传,首先放上代码,以tcp为例,摘自python核心编程(坑爹,书上居然没有缩进)。

服务器端代码:

from socket import *  
from time import ctime  
HOST = ''                       #空字符表示不绑定如何ip,如何ip都可以与此服务器连接
PORT = 21533                    #端口是随机的,但是不能用与计算机其他程序端口重复,建议1024-65535。还有值得注意,如果此脚本运行2次,则会出现错误,第二次需                                #要改动代码,因为关闭此脚本时,没有关闭端口,第二次运行时,21533已经存在。要么命令行去关闭端口,要么重启,要么改程序。
BUFSIZ = 1024                   #缓存大小,我只发字符,这里设置为1k足以。发送大东西,需要用循环。
ADDR = (HOST,PORT)               #绑定
tcpSerSock = socket(AF_INET,SOCK_STREAM)        # SOCK_STREAM指的是tcp
tcpSerSock.bind(ADDR)                           #绑定
tcpSerSock.listen(5)                            #监听
 
while True:                                     #死循环
    print 'waiting for connection...'           #打印
    tcpCliSock, addr = tcpSerSock.accept()      #接受消息,当有消息接收后,才会再向下执行
    print '...connected from:', addr            #接受到消息后,打印消息
    while True:                                 #又一个死循环。除非接收到消息为空,才会跳出次循环
        data = tcpCliSock.recv(BUFSIZ)          #设置数据大小
        if not data:                            #如上上所述,数据为空,则结束此层循环
            break  
        tcpCliSock.send('[%s] %s'%(ctime(), data))    #发送消息到客户端,消息为“服务器时间”+“客户端接收到的消息”
    
tcpCliSock.close()                             #最后2行代码永远不会被执行,因为前面是死循环,这也造成了,我之前说的,第二次执行代码是会出错。
tcpSerSock.close()  




客户端代码:

from socket import *  
HOST = 'localhost'              #设置自己主机
PORT = 21533                    #端口必须和服务器设置的一致
BUFSIZ = 1024  			
ADDR = (HOST, PORT)   
tcpCliSock = socket(AF_INET, SOCK_STREAM)  
tcpCliSock.connect(ADDR)       #连接,而不是监听
while True:                    #死循环
    data = raw_input('> ')     #等待用户输入
    if not data:               #如果为空,则,跳出死循环,执行tcpCliSock.close() 
        break  
    tcpCliSock.send(data)      #如果不空,则发送
    data = tcpCliSock.recv(BUFSIZ   #接受服务器数据,并且处理,其处理过程是在此date之前加入时间
    if not data:                    #接受数据为空,则,退出
        break  
    print data                 #打印数据
tcpCliSock.close() 

先执行服务端代码,后执行客户端代码。

次程序适合在同一主机上测试,若不同主机上测试,则需改动host即可。


你可能感兴趣的:(python 网络编程1)