Python 网络编程(有连接)

    xiaoxiao2021-03-25  56

    1.0 重要概念:

    客户/服务器构架:服务器是一个软件或硬件,提供客户需要的服务。服务器存在的唯一目的就是等待客户请求,给客户服务。服务完成后等待其它请求。硬件服务器,如打印机,它不断等待打印的请求。软件服务器,例如Web服务器,提供数据和网页。

    套接字 = 通讯端点:所谓套接字就是指“通讯端点”概念的计算机网络数据结构。在进行通讯前必须创建套接字,就像电话的插口一样。

    Internet网络地址:网络地址由主机和端口组成。主机为用户名,例如在WIN系统下为Administrator,Linux下为sophie。端口的合法范围为0至65535。小于1024为系统保留端口。

    2.0 总体思路:

    服务器

    创建通讯端点 进入监听的无限循环 (通知潜在客户,服务器已经运行了) 建立与客户的连接 与客户进行数据交互通讯结束 进入监听的无限循环

    客户:

    创建通讯端点 建立链接 进行数据交换 切断链接

    3.0 Python实现(通过 socket 模块):

    服务器端口

    #!/usr/bin/env python2 # -*- coding: utf-8 -*- """ Created on Fri Mar 10 18:43:58 2017 @author: angelfish """ import socket as sk # 加载套接字模块 from time import ctime HOST = '' #允许任何客户进来,所以这个为空 PORT = 21567 #设置通信端口为21567 BUFSIZ = 1024 #设置通信缓存为1kB ADDR = (HOST,PORT) #设置通信地址 tcpSerSock = sk.socket(sk.AF_INET, sk.SOCK_STREAM) #创建一个通信端口的类实例 tcpSerSock.bind(ADDR) #在通讯端口绑定地址 tcpSerSock.listen(5) #指定内核应该为相应套接字排队的最大连接数 while 1: #进入监听循环 print 'waiting for connection...' tcpCliSock, addr = tcpSerSock.accept() print 'conneted from:',addr while 1: #连接上之后进入交互数据循环 data = tcpCliSock.recv(BUFSIZ) if not data: break tcpCliSock.send('[%s] %s' %(ctime(),data)) #返回带有时间戳的数据 tcpCliSock.close() tcpSerSock.close()

    客户端口

    #!/usr/bin/env python2 # -*- coding: utf-8 -*- """ Created on Fri Mar 10 18:55:43 2017 @author: angelfish """ import socket as sk HOST = 'angelfish' #我用的Linux下的用户名为angelfish PORT = 21567 BUFSIZ = 1024 ADDR = (HOST,PORT) tcpCliSock = sk.socket(sk.AF_INET, sk.SOCK_STREAM) tcpCliSock.connect(ADDR) while 1: data = raw_input('>>') if not data: break tcpCliSock.send(data) data = tcpCliSock.recv(BUFSIZ) if not data: break print data tcpCliSock.close()
    转载请注明原文地址: https://ju.6miu.com/read-38449.html

    最新回复(0)