创建仅限于localhost连接的套接字

Dr.*_*son 9 python client-server

我有一个包含许多线程的python程序.我正在考虑创建一个套接字,将其绑定到localhost,并让线程读/写到这个中心位置.但是我不希望这个套接字打开网络的其余部分,只127.0.0.1接受来自的连接.我将如何做到这一点(在Python中)?这是一个合适的设计吗?还是有点优雅的东西?

Gre*_*ill 7

给定一个socket创建socket.socket(),你可以bind()在听之前使用:

socket.bind(('127.0.0.1', 80))
Run Code Online (Sandbox Code Playgroud)

使用该地址127.0.0.1表示套接字应仅绑定到本地接口.


pet*_*tik 5

http://www.amk.ca/python/howto/sockets/

显示一些套接字示例.我觉得这个小窍子对你很有意思

我们使用了socket.gethostname(),以便外部世界可以看到套接字.如果我们使用了s.bind(('',80))或s.bind(('localhost',80))或s.bind(('127.0.0.1',80))我们仍然会有一个"服务器" "套接字,但只能在同一台机器中看到.

我想你有答案(见下面的修正)

至于使用这种方法进行线程通信的有效性.我不确定它如何处理多个线程和读/写

编辑

下面链接似乎有一个python配方进行一些线程间的通信

http://code.activestate.com/recipes/491281/

玩得开心!

编辑

该文章是不正确的,并指出" s.bind(('',80))将绑定到INADDR_ANY "

  • 那篇文章不正确.s.bind(('',80))将绑定到INADDR_ANY. (3认同)

nos*_*nos 0

如果你这样做 sock.bind((port,'127.0.0.1')) 它只会在本地主机上监听,而不是在其他接口上,所以这就是你所需要的。