まず、ユーザー名とパスワードを平文の文字列として送信することで、事実上それらを無料で提供することになります。いくつかの基本的なツールがあれば、誰でもユーザー名とパスワードを盗み見られる可能性があります。暗号化と接続を保護する方法について読む必要があります。Java には組み込みの暗号化ライブラリがあり、これを非常に簡単に行うことができます。
可能であれば、XMPP (Jabber) のような開発済みのチャット プロトコルを使用することをお勧めします。このプロトコルには、Smack など、すべてを実行する多くの無料の Java ライブラリ実装が既に存在します。外部ライブラリの使用を許可しない学校のプロジェクトでこれを行う場合を除き、それ自体が非常に野心的である場合を除き、ここで車輪を再発明する必要はありません。XMPP は、テキスト チャット、ボイス チャット、およびファイル転送をサポートしています。
また、特定のニーズに合わせて変更できる、完全な機能を備えたオープンソースのチャット クライアントがすでにいくつかあります。ただし、心に留めておくべきことの 1 つは、オープンソース プロジェクトのライセンスです。一般的な GPL などの一部のオープンソース ライセンスでは、プロジェクトでオープンソース プロジェクトの一部を使用するには、プロジェクト全体のソース コードをリリースする必要があります。これは企業にとって非常に悲惨なことになる可能性があるので、気をつけてください。
それでもゼロから始めたい場合は、独自の通信プロトコルを実装する必要があります。gstreamer とファイル転送をどのように組み込むかを考慮しながら、これを自分で設計する必要があります。
繰り返しになりますが、アイデアを得るために、少なくとも XMPP などの既に設計されたプロトコルを確認することをお勧めします。
通常、プロトコルには、
- これがどのタイプの要求/応答であるかを説明するいくつかのデータ。これは、1 バイトとして格納された数値、または HTTP で行われるようなテキスト文字列です。
- メッセージの対象者に関するその他のデータ。IP アドレス、ユーザー名、両方の組み合わせなどを指定できます。直接通信を行う場合、つまり中間サーバーを介さない場合は不要です。
- リクエストが送信された時刻
- データそのもの
- ある種の暗号化。ユーザーが承認された後に開始することをお勧めします
たとえば、本当に基本的なプロトコルは次のようになります。
リクエスト タイプ: 1 バイト。1 = テキスト、2 = 音声データ、3 = ファイル転送、4 = 現在ログインしているクライアント リストの要求
送信先: int (IPアドレス)
時間:長い。System.currentTimeMillis が返すものなど、これを UTC 時間として送信するのが最適です。
データの長さ: int
データ: タイプに応じた可変長データ
次に、送信されるデータの種類ごとに、データを異なる方法で実装します。
テキスト: DataStream によって送信された文字列
音声: gstreamer からの音声データ (gstreamer の仕組みがわからない)
ファイル転送:
ファイル名: DataStream によって送信された文字列
長さ: ロング
データ: FileInputStream から読み取ったとおり
現在ログインしているクライアントのリスト:
データ: DataStream.writeObject によって送信されたとおり
幸運を