组合服务器和客户端python套接字

时间:2016-12-04 03:52:36

标签: python sockets

我正在尝试使用python(稍后可能在c中)和TCP套接字创建本地网络聊天程序。

我的目的是让服务器侦听当前计算机的地址以获取传入的消息,并将这些消息传递给客户端(我现在还不确定)。 客户端将是一个简单的gui,可以在本地连接上向活动服务器发送消息。实际上,此设置将形成节点网络。

是否可以在同一个应用程序中同时拥有服务器和客户端,最好不使用线程?我知道服务器会在收听连接时暂停,因此gui无法响应。

如果我不能在同一个应用程序中同时使用这两个应用程序,那么我认为有两个应用程序相互通信,但是线程似乎是一个更好的替代方案,因为我将以任何一种方式使用2个进程。如果我要使用单独的应用程序,我如何从服务器向客户端发送字符串,以更新gui?

我是否可以在希望服务器向客户端发送消息时发生某种事件(在客户端)?

此外,我如何检查服务器是否处于活动状态(可用并绑定到其计算机地址,等待消息)?

我的服务器/客户关系模型是否合理?有什么建议吗?

我已经检查过堆栈溢出的类似套接字问题,但是没有找到任何具体解决我的问题的问题。我可能错过了一些,所以如果发现它们相关,请将注意力转移给他们。

这个问题似乎非常相似:Python socket server: listening to multiple clients,但他们似乎没有“服务器”这样的问题。 &安培;每个客户。

注意:我是套接字和套接字的新手。联网。

1 个答案:

答案 0 :(得分:2)

  1. 首先,你需要阅读一些关于套接字编程的好书或一些文章(google it - 有很多文章)。 Stackoverflow是不够的。你只会浪费时间尝试从随机问题 - 答案中学到一些东西。
  2. "服务器"并不意味着只接收模式"和"客户"并不意味着"只发送模式。客户端和服务器之间存在全双工连接。区别在于服务器"将打开一个端口,并将等待传入连接。和"客户"知道服务器地址将启动此连接。一旦建立连接 - "客户端"和"服务器"将能够进行全双工通信。
  3. 是的,可以在同一个应用程序中同时拥有服务器和客户端"。但这种行为很少见。如果您的服务器需要例如向其他服务器发送请求(例如google.com),您将需要在服务器端。要做到这一点,您只需要处理两种类型的套接字:主动和被动。
  4. "如何检查服务器是否处于活动状态?"。如果服务器是" ON"你将能够连接到它。如果不是 - 您的尝试将返回错误(Python中的例外)。那就是它。
  5. 使用套接字有两种方法:阻塞模式和非阻塞模式。在后一种情况下,您的程序不需要等待操作结束。它可以在通过套接字接收或发送数据的同时开展业务。
  6. 我不建议您使用原始套接字。这不合理。只有当您尝试创建一些具有一些独特功能的全新套接字框架时才需要原始套接字(但为了做到这一点,您应该是套接字开发方面的专家)。仅仅因为已经存在数十个已经存在的框架仅在Python中(有些用于C / C ++。libevent是其中最好的框架之一)。 Python异步套接字库之一是asyncio - Python标准库的一部分(适用于现代Python版本)。
  7. 祝你好运!