2011-10-27 17 views
1

私はBoostの新機能ですが、特定のポートでクライアントからの接続を受け付けることができるサーバーを作成しようとしています。このサーバーは、同じポート上のクライアントにも書き込むことができます。しかしブーストソケット/アクセプタは同じポートでリッスン/接続できません。

、私はasync_accept()が無効な関数エラーで失敗acceptor_.bind()/acceptor_.listen()などsocket_.connect(*iterator)を使用して、両方を実装しようとします。

私がを使用している場合、acceptor_.listen()async_write()を使用して(サーバーからクライアントへ)ソケットに書き込むことができます。

私は、私はasync_read_some()を使用してソケット(サーバにクライアントから送信されたデータ)から読み取ることができていますsocket_.connect()を使用します(しかしacceptor_.listen()acceptor_.bind()をコメントアウトした場合)。

個別のソケットオブジェクトを作成するか、別のポートを選択する必要がありますか?私は再利用アドレスをTrueに設定して有効にしました。

+0

ではなく、あなたのコードは、言葉で説明を呼び出​​すのに対し:// sscceを.org /)を使用してください。 –

答えて

2

あなたはすでにサーバーに接続されているクライアントにconnect()をしようとしていますか?その接続で受け入れられた既存のソケットに書き込むだけです。

connect()クライアントへの2番目の接続(たとえば、FTPプロトコルがデータ転送用のように)を行う必要がある場合は、そのソケットをバインドするポートを指定しないでください。 OSが使用する適切なポートを決定させる。

+0

あなたは絶対に正しいです!聞いて接続する必要はありませんでした。ちょうど接続されていて、非同期に読み書きがうまく動作しました。本当にありがとう! –

1

ネットワークプログラミングの基本概念を理解していないようですが、これはブーストやAsioライブラリとは関係ありません。一般に、サーバはaccept()を呼び出し、クライアントはconnect()を呼び出します。 ASIO例は、これを詳細に示し

を参照し、サーバが起動されますのでご注意

  • async_accept()
  • async_read_some()
  • async_write()

クライアントは[完全なコード](HTTP POSTを、

  • connect()
  • write()
  • read()
関連する問題