Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
结合服务器和客户端python套接字_Python_Sockets - Fatal编程技术网

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

结合服务器和客户端python套接字,python,sockets,Python,Sockets,我正在尝试使用python(稍后可能是c语言)和TCP套接字制作一个本地网络聊天程序 我的目的是让服务器在当前计算机的地址上侦听传入的消息,并将这些消息转发给客户端(我现在还不确定)。 客户端是一个简单的gui,可以通过本地连接向活动服务器发送消息。实际上,这种设置将形成一个节点网络 是否可以将服务器和客户端都放在同一个应用程序中,最好不使用线程?我知道服务器在侦听连接时会暂停,因此gui无法响应 如果我不能在同一个应用程序中同时使用这两个进程,我想使用两个相互通信的应用程序,但是线程似乎是一个

我正在尝试使用python(稍后可能是c语言)和TCP套接字制作一个本地网络聊天程序

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

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

如果我不能在同一个应用程序中同时使用这两个进程,我想使用两个相互通信的应用程序,但是线程似乎是一个更好的选择,因为我将使用两个进程。如果我有单独的应用程序,我如何从服务器向客户端发送字符串以更新gui

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

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

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

我已经检查了有关堆栈溢出的类似套接字问题,但没有找到任何专门解决我的问题的套接字。我可能遗漏了一些,因此如果发现它们相关,请将我的注意力转移到它们上

这个问题似乎非常相似:,但是它们似乎没有一个“服务器”和一个客户端

注意:我是套接字和网络新手

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

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

  • 祝你好运

    我也用谷歌搜索过套接字,但我不确定如何处理开放连接和允许gui操作(发送)这两个问题。我打算为应用程序提供服务器和客户端,因为如果我只有一台服务器,运行它的计算机可能会进入睡眠、离开等状态,因此一些客户端必须