如何使用java套接字编程在同一文件中实现对等代码,即服务器和客户端代码

如何使用java套接字编程在同一文件中实现对等代码,即服务器和客户端代码,java,multithreading,sockets,p2p,Java,Multithreading,Sockets,P2p,是否可以编写一个同时作为服务器和客户端的程序?假设程序P有三个实例:P1、P2和P3 在一个用例中,P2从P1请求文件 当P1向P2提供文件时,P1请求文件表单P3 P3将文件提供给P1。(此时,P3可以从P1或P2上传/下载。) 从概念上讲,我应该能够做到 这是通过在 每次请求传入时都执行线程。 有不同的方法吗 编辑: 我有一些初始代码,允许我作为客户机从服务器请求文件(提供服务器端口号和文件名)。同样的代码还启动了一个服务器线程,该线程侦听传入的请求。因此,实际上,这个代码库充当对等(客户

是否可以编写一个同时作为服务器和客户端的程序?假设程序P有三个实例:P1、P2和P3

  • 在一个用例中,P2从P1请求文件
  • 当P1向P2提供文件时,P1请求文件表单P3
  • P3将文件提供给P1。(此时,P3可以从P1或P2上传/下载。)
  • 从概念上讲,我应该能够做到 这是通过在 每次请求传入时都执行线程。 有不同的方法吗

    编辑:


    我有一些初始代码,允许我作为客户机从服务器请求文件(提供服务器端口号和文件名)。同样的代码还启动了一个服务器线程,该线程侦听传入的请求。因此,实际上,这个代码库充当对等(客户端和服务器)


    但是,我现在的问题是在第一次请求一个文件之后,代码在服务器部分永远循环,实际上不允许我作为客户机发出任何额外的请求。然后我的问题是:当服务器侦听端口时,是否可以保持套接字打开,而不需要服务器无限循环?通过这种方式,我可以在“后台”运行服务器,并能够根据需要向客户端发送命令。

    是的,这是完全可能的,事实上非常常见。大多数企业应用程序都利用了这一点

    例如,用户从web服务器请求在浏览器中显示网页。更准确地说,用户请求显示第23条

    然后,web服务器请求有关第23条的数据库信息。通过来自数据库服务器的响应,web服务器构建一个格式良好的HTML页面以显示给用户

    从概念上讲,使用网络只是一种通信方式,即发送或接收信息。这与从文件中写入/读取没有多大区别。在linux中,情况也是如此

    因此,是的,每台服务器都可以监听一个端口,同时作为另一台服务器的客户端。JAVA word中服务器的经典实现是在服务器端为每个客户端使用一个线程

    这意味着当P2连接到P1时,P1和P2之间会建立一个新的连接,P2使用线程将响应写入P1。。。在大多数简单的情况下,同一个线程实际上会从其他服务器请求丢失的信息,因此发送请求并等待响应

    回应您的编辑:

    服务器的经典线程实现是监听具有无限循环的端口。每次检测到来自客户端的连接请求时,都会建立一个连接,协商客户端和服务器上用于此通信的端口,并将此连接委托给另一个线程(通常使用线程池,以便在通信完成时不为下一个客户端重用线程)


    这样,您的线程就可以随时响应客户端的连接请求。

    谢谢您的回复。我将很快发布我的代码。也许,我把两个不同的问题混为一谈。但是,到目前为止,我明白了你的意思,我的实现很可能与你的评论一致,减去线程池。每次有请求时,我都会创建一个全新的线程。此外,我认为我正在为客户端和服务器使用相同的端口(因为它们在同一台机器上)。