美文网首页
socket01最小量代码

socket01最小量代码

作者: 极光火狐狸 | 来源:发表于2017-05-01 18:54 被阅读41次

simple_socket/server.py

# -.- coding:utf-8 -.-
import socket

HOST = '127.0.0.1'
PORT = 50007
EOL1 = b'\r\n'
EOL2 = b'\r\n\r\n'

sock = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind((HOST, PORT))
sock.listen(1)

while True:
    try:
        data = b''
        connection, address = sock.accept()
        while True:
            data += connection.recv(4096)
            if EOL1 in data or EOL2 in data:
                break
        connection.sendall(data)
        connection.close()
    finally:
        connection.close()

simple_socket/client.py

# -.- coding:utf-8 -.-
import socket

host = '127.0.0.1'
port = 50007
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.connect((host, port))
    s.sendall(b'Hello, world')
    data = s.recv(4096)

print('Received:', data)

运行

# 启动服务 server.py
python simple_socket/server.py

# 运行客户端 client.py
python simple_socket/client.py

# 显示结果
Received: b'Hello, world'

AddressFamily

网络协议
  • socket.AF_UNIX 表示linux/unix套接字协议
  • socket.AF_INET 表示ipv4协议
  • socket.AF_INET6 表示ipv6协议
网络类型
  • socket.SOCK_STREAM 表示仅支持tcp类型
  • socket.SOCK_DGRAM 表示仅支持udp类型
  • socket.RAW
    表示支持tcp和udp两种类型, 但结构体和checksum需自行编码计算
    想了解更多raw类型编程,请参考这里
套接字(socket.AF_UNIX)

套接字协议是操作系统在文件系统上创建一个socket文件,所有信息都是通过该文件来传输,也就是说套接字通常只能被同一台机器上的不同进程读取;据说由于它的机制相对比较简单,所以会比socket.INET(完整的ipv4协议)要快。
若采用套接字模式提供服务,而且又要可以被外部访问,那么利用nginx的proxy_pass参数可以满足这个要求;下面列出一个套接字的代码样例。

main.py

# -.- coding:utf-8 -.-
import tornado.ioloop
import tornado.web
from tornado import httpserver
from tornado.netutil import bind_unix_socket


class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, world")


def make_app():
    return tornado.web.Application([
        (r"/", MainHandler),
    ])


if __name__ == "__main__":
    app = make_app()
    server = httpserver.HTTPServer(app, xheaders=True)
    socket = bind_unix_socket('/tmp/main_tornado.sock', mode=0o666)
    server.add_socket(socket)
    tornado.ioloop.IOLoop.current().start()

运行

[root@localhost unix_socket]# python main.py

# 开启另外一个窗口来访问.
[root@localhost simple_socket]# curl --unix-socket /tmp/main_tornado.sock http://localhost/

# 显示信息
Hello, world

参考

相关文章

  • socket01最小量代码

    simple_socket/server.py simple_socket/client.py 运行 Addres...

  • 数学分析理论基础11:无穷小量与无穷大量

    无穷小量与无穷大量 无穷小量 定义:设f在上有定义,若,则称f为当时的无穷小量 若g在上有界,则称g为当时的有界量...

  • 2019-08-10读经

    读经一(天主喜爱乐捐的人。) 恭读圣保禄宗徒致格林多人后书 9:6-10 弟兄们:小量播种的,也要小量收获;大量播...

  • 法水流注.对与错

    嘴大欲吞天 肚小量难容 撑个稀巴烂 ...

  • 同济高等数学第七版1.7习题精讲

    同济高等数学第七版1.7习题精讲 1.当时,与相比,那一个是高阶无穷小量? 解:(1) 所以,是高阶无穷小量。 2...

  • 小小量化0817

    大A股果然不负众望,一枝独秀。。 全球普涨的行情下,继续高开低走。 三大股指基本都创股灾调整以来新低。 最近A股应...

  • 小量收点贝啦

    最近也很苦恼,文章辛苦写下来,阅读量没有多少,收益也没有多少,天天累死累活,很累,充太贵的会员近期很难回本,所以我...

  • 喜茶_蓝柑火龙(柠檬)物语

    在小量斗中加入蓝柑酱4ml 再加26ml的雪碧,然后把小量斗倒入调味杯中加入冰到满杯加果酱25g摇匀,再加满雪碧到...

  • 高数知识点

    无穷小量乘以一个有界变量还是无穷小量,那么无穷大量乘以一个有界量是不是无穷大 不一定,可能极限不存在,比如xsin...

  • 一碗汤元

    这是我吃过最“货真价实”的一次中餐,28元一餐不算贵,一个煎饼巴掌大,10元;一小碗汤元8个,18元,个小量少,以...

网友评论

      本文标题:socket01最小量代码

      本文链接:https://www.haomeiwen.com/subject/kmhqtxtx.html