前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用socket进行网络通信

用socket进行网络通信

作者头像
DC童生
发布2019-03-05 15:26:07
5260
发布2019-03-05 15:26:07
举报
文章被收录于专栏:机器学习原理机器学习原理

建立tcp传输

代码语言:javascript
复制
    serves_socket = socket.socket(family=socket.AF_INET,type=socket.SOCK_STREAM)
    serves_socket.bind(("",8000))
    serves_socket.listen(128)

建立多线程访问

代码语言:javascript
复制
while True:
        cli_socket, cli_address = serves_socket.accept()
        print("[%s %s]客户连接上了"% cli_address)
        handale_client_socket = Process(target=handle_client,args=(cli_socket,))
        handale_client_socket.start()
        cli_socket.close()

处理客户端请求以及生成HTTP报头

代码语言:javascript
复制
def handle_client(cli_socket):
    '''处理客户端请求'''
    # 获取客户端请求数据
    request_data = cli_socket.recv(1024)
    print(request_data)

    #构造响应数据
    reponse_start_line = "HTTP/1.1 200 ok\r\n"
    reponse_headers = "Server: myserves\r\n"
    reponse_body = "hello world"
    reponse = reponse_start_line+reponse_headers+"\r\n"+reponse_body
    print(reponse)

    #向客户端返回响应数据
    cli_socket.send(bytes(reponse,"utf-8"))

    #关闭客户端连接
    cli_socket.close()

一个简单的链接搭建完成了 访问http://127.0.0.2:8000/ 结果:

代码语言:javascript
复制
hello world

访问静态文件

  • 进行同一个接口重复访问设置
代码语言:javascript
复制
  serves_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
  • 对2进制文件进行utf-8解码
代码语言:javascript
复制
#解析报文   GET / HTTP/1.1
    request_lines = request_data.splitlines()
    request_start_line = request_lines[0]
    file_name = re.match(r'\w+ +(/[^ ]*)',request_start_line.decode("utf-8")).group(1)
    if "/"==file_name:
        file_name="/index.html"
    try:
        with open(HTML_ROOT_DIR + file_name,"rb") as f:
            file_data = f.read()
    except IOError:
        reponse_start_line = "HTTP/1.1 404 Not Found\r\n"
        reponse_headers = "Server: myserves\r\n"
        reponse_body = "文件找不到"
    else:
    #构造响应数据
        reponse_start_line = "HTTP/1.1 200 ok\r\n"
        reponse_headers = "Server: myserves\r\n"
        reponse_body = file_data.decode("utf-8")
    reponse = reponse_start_line+reponse_headers+"\r\n"+reponse_body
    print(reponse)
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.01.29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 建立tcp传输
  • 建立多线程访问
  • 处理客户端请求以及生成HTTP报头
  • 访问静态文件
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档