2016-12-04 67 views
0

我正在尝试使用python(可能稍后会在c)和TCP套接字进行本地网络聊天程序。结合服务器和客户端python套接字

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

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

如果我不能在同一个应用程序中同时有两个应用程序相互通信,但是线程看起来是一个更好的替代方案,因为我将使用两个过程。如果我有独立的应用程序,我怎么能从服务器发送字符串到客户端,以更新gui?

当我想要服务器向客户端发送消息时,会发生某种事件(在客户端)吗?

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

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

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

这个问题看起来非常相似:Python socket server: listening to multiple clients,但是他们似乎没有每个客户端的'服务器'&。

注:我是新来的套接字&联网。

回答

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

祝你好运!

+0

我也使用了套接字,但是我不确定如何处理这两个连接,并允许gui操作(发送)。 我打算有一个服务器和客户端的应用程序,因为如果我有一台服务器,运行它的计算机可能会睡觉,离开等,所以一些客户端将不得不承担责任。你能否详细说明或提供非阻塞模式的参考? (这是使用.select()?) – Ben

+0

我会看看asyncio,谢谢你的信息。 – Ben

+0

“这是使用.select()?”。是:select(),poll(),epoll()等。 – KromviellBlack

相关问题