• Python Server.serverport方法的具体含义及用法?



    # 编写人:Jaoany
    # 开发时间:2021/7/23 15:57
    # ! /usr/bin/env python
    # -*- coding=utf-8 -*-
    # http浏览器接口,可以运行访问自己写的代码或者界面或者网页

    import socket # 用套接字编程

    # serverport是服务器端口,将服务器和客户端端口号设置一致,才可以相互通信可以直接赋值
    # (主机ip地址,和主机的端口号,这里主机指你用来作为服务器的计算机)
    serverPort = 6699
    # 设置端口号和本地ip
    bind_ip = "127.0.0.1" 
    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 在建立套接字文件描述符成功后,需要对套接字进行地址和端口的绑定,才能进行数据的接收和发送操作。
    server.bind((bind_ip, serverPort))
    # server.listen()是tls模块内的Socket类的内置应用程序编程接口,用于启动服务器以侦听加密的连接。
    '''
    这里的5,指的是等待的进程数,比如有105个进程,可以并发执行100个,其余最多有五个五个可以挂起,第106个进程直接被操作系统拒绝处理,等待前面处理完再到其他排队等待的,
    也就是在拒绝连接之前,操作系统可以挂起的最大连接数量。
    该值至少为1,大部分应用程序设为5就可以了。
    '''
    server.listen(5)
    print('the server is ready to receive')
    # headers = {}使用http协议的时候要用headers传参,请求头(request headers)和响应头(response headers)
    # get_headers()是PHP中一个系统级函数,他可以返回一个包含有服务器响应一个HTTP请求所发送的标头的数组。
    # 如果失败则返回 FALSE 并发出一条 E_WARNING 级别的错误信息(可用来判断远程文件是否存在)。
    # 将for循环的结果存储到列表(
    line_list)中
    #for line in line_list:这是一个循环
    def get_headers(line_list):
    headers = {}
    for line in line_list:
    new_line = line.decode('utf8')

    '''
    # find() 方法,检测字符串中是否包含子字符串 str ,
    # str.find(str, beg=0, end=len(string))
    # 如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,如果指定范围内包含指定索引值,则返回索引值在字符串中的起始位置,否则返回-1。
    # 该语句表示检查字符串newline中是否包含字符串“:”
    # find()方法对大小写敏感
    # index方法与find方法相同
    # 只是:index()方法在没有找到指定字符串的时候会抛出异常.
    # 另外,index()也可以用于List对象,返回指定元素的索引,用法相同.
    '''

            index = new_line.find(':')
    key = new_line[:index]
    value = new_line[index + 1:].strip()
    headers[key] = value
    return headers
    '''
    strip()方法用于移除字符串头尾指定的字符(默认为空格或者换行符)或字符序列。

     注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。

    strip()方法的语法:str.strip([chars])

    返回移除字符串头尾指定的字符生成的新的字符串。

    '''

    # 动态获取请求报文需要的资源
    while True:
    # 开始等待,接受连接请求
    client, addr = server.accept()
    print
    "Accepted connection from: %s:%d" % (addr[0], addr[1])
    try:
    # 调用recv()函数,接收字节,每次接收1024个,但是实际上可能发送的并没有1024个,这个时候recv并不会一直等待着,而在一定的时间之后能接受多少先接收多少。
    # # 接收到客户连接请求后,建立新的TCP连接套接字
    sentence = client.recv(1024)
    # 先用split('.')方法将字符串以"."开割形成一个字符串数组,然后再通过索引[1]取出所得数组中的第二个元素的值
    '''

    split()方法是将指定字符串按某指定的分隔符进行拆分,拆分将会形成一个字符串的数组并返回。

    数组中的每元素都各自对应一个索引值,就好比在数据库的表中每行数据纪录都拥有自己的索引ID一样数组元素的索引值是从0开始计数的,也就是说第一个元素的索引值是0,往后依次加1。

    我们可以用数组的索引值来取对应位置的数组元素的值,比如说我们要取数组的第一个“aa”,那么我们就可以这样写 :string aa = strArray[0]。

    '''
    filename = sentence.split()[1]
    # r"index.html", "r" 读取本地文件
    #f = open('所要打开文件的url地址,注意斜杠必须是“/”,反了就不行'+filename.decode('utf-8'), 'rb')
            f = open('C:/Users/Jaoany/Desktop/工作/发邮件接口' + filename.decode('utf-8'), 'rb')

    f=print('hello,jaoany')
    line_list = sentence.split(b' ')
    headers = get_headers(line_list)
    for i in line_list:
    print(i)
    accept = str(headers.get('Accept').split(',')[0].strip())
    # 将从文件中读取的数据赋值给putputdata
    outputdata = f.read()
    header = ' HTTP/1.1 200 OK '
    'Connection: close '
    'Content-Type: ' + accept + ' '
    'Content-Length: %d ' % (len(outputdata)) # 长度设置 important
      # 将所请求文件的内容发送到客户端
    client.send(header.encode() + outputdata)
    client.close()
    except IOError:
      # 异常处理,发送未找到文件的响应消息

    header = ' HTTP/1.1 404 Not Found'
    client.send(header.encode())


    本文来自博客园,作者:Jaoany,转载请注明原文链接:https://www.cnblogs.com/fanglijiao/p/15060165.html

  • 相关阅读:
    使用MOCK对象进行单元测试
    软件项目管理的圣经人月神话(中)
    java中使用MD5进行计算摘要
    Windows平台安装Bugzilla(上)
    dom4j学习总结(二)
    深入解析ATL(第二版ATL8.0)(2.12.2节)
    深入了解JUnit 4
    java中关于时间日期操作的常用函数
    使用XStream需注意的问题
    Windows平台安装Bugzilla(下)
  • 原文地址:https://www.cnblogs.com/fanglijiao/p/15060165.html
Copyright © 2020-2023  润新知