human
クライアントからの接続を待機し、接続を受信したら、その単一の接続IPアドレスからのみの接続のみを許可するシンプルなPython3 HTTPSファイルサーバーを作成します。他のユーザーが接続しようとした場合、エラーページでサーバーに返信します。また、繰り返しダウンロードを許可する代わりに、サーバーを1回だけダウンロードできるようにするためのサーバーを作成します。
gpt
Python3によるHTTPSファイルサーバーの実装サンプルです：

```
import ssl
import socket

context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
context.load_cert_chain(certfile="server.crt", keyfile="server.key")

host = ''
port = 443

clients = []

def handle_client(conn, addr):
    if addr[0] not in clients:
        clients.append(addr[0])
        while True:
            data = conn.recv(1024)
            if not data:
                break
            if data.startswith(b'GET /'):
                # Serve the file requested in the GET request
                filename = data.split()[1].decode()[1:]
                try:
                    with open(filename, 'rb') as f:
                        file_data = f.read()
                        conn.sendall(b'HTTP/1.1 200 OK\r\n\r\n' + file_data)
                        # Remove the file from the server to allow it to be downloaded only once
                        open(filename, 'w').close()
                except FileNotFoundError:
                    conn.sendall(b'HTTP/1.1 404 Not Found\r\n\r\n<html><body><h1>404 Not Found</h1></body></html>')
            else:
                break
        clients.remove(addr[0])
    else:
        conn.sendall(b'HTTP/1.1 403 Forbidden\r\n\r\n<html><body><h1>403 Forbidden</h1></body></html>')
    conn.close()

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.bind((host, port))
    s.listen()
    while True:
        conn, addr = s.accept()
        handle_client(context.wrap_socket(conn, server_side=True), addr)```

この実装では ssl ライブラリを使ってデフォルトの SSL コンテキストを作成し、サーバ用の証明書と秘密鍵を読み込んでいます。socketライブラリはソケットの作成とバインド、着信コネクションのリッスン、コネクションの受け付けに使用されます。

関数 `handle_client` は接続するクライアントごとに呼び出され、接続先のIPアドレスが接続クライアントのリストになければ、要求されたファイルを提供する。要求されたファイルが見つからない場合、関数はステータスコード404のエラーページを送信する。接続中のIPアドレスがすでに接続中のクライアントのリストにある場合、この関数はステータスコード403のエラーページを送信します。

この実装はファイルを提供するだけであり、HTTPヘッダーやGET以外のリクエストメソッドなど、他のタイプのリクエストやHTTP機能を扱わないことに注意してください。これは基本的な出発点となることを意図しており、必要に応じて拡張することができます。
human
今度はExpress.jsを使用して、もう一度やり直してください
gpt
node.jsのexpress.jsを使用して、説明されているhttpsファイルサーバーの実装を次に示します。

「const https = require（ 'https'）;
const express = require（ 'express'）;

const app = express（）;

const options = {
  キー：fs.readfilesync（ 'server.key'）、
  cert：fs.readfilesync（ 'server.crt'）
};

const clients = new set（）;

app.get（ '/：filename'、（req、res）=> {
  const {ip} = req.Connection;
  if（clients.has（ip））{
    Res.Status（403）.send（ '<html> <body> <h1> 403 ilbridden </h1> </body> </html>'）;
  } それ以外 {
    clients.add（ip）;
    const {filename} = req.params;
    fs.Access（filename、fs.constants.r_ok、（err）=> {
      if（err）{
        Res.Status（404）.send（ '<html> <body> <h1> 404が見つかりません</h1> </body> </html>'）;
      } それ以外 {
        fs.readfile（filename、（error、data）=> {
          if（error）{
            Res.Status（500）.Send（ '<html> <body> <h1> 500内部サーバーエラー</h1> </body> </html>'）;
          } それ以外 {
            Res.Status（200）.send（data）;
            fs.unlink（filename、（linkerror）=> {
              if（loninkerror）{
                Console.Error（linkerror）;
              }
            }）;
          }
        }）;
      }
    }）;
  }
}）;

https.createserver（options、app）.listen（443、（）=> {
  console.log（ 'httpsファイルサーバーがポート443でリスニングされています'）;
}）; `` `

この実装では、FS、HTTPS、およびExpressライブラリを使用して、HTTPSを介してファイルを提供します。Expressライブラリは、着信HTTP要求を処理し、HTTP応答を送信するために使用されます。

「クライアント」セットは、接続されたクライアントを追跡し、各ファイルが単一のIPアドレスに1回しか提供されていないことを確認するために使用されます。`app.get`メソッドは、着信GETリクエストを処理し、要求されたファイルを提供するために使用されます。ファイルが見つからない場合、関数は404ステータスコードのエラーページを送信します。接続IPアドレスが既にファイルを受信している場合、関数は403ステータスコードのエラーページを送信します。

この実装は、基本的な出発点でもあり、必要に応じて拡張できることに注意してください。