web-dev-qa-db-ja.com

アクセス許可で禁止されている方法でソケットにアクセスしようとしました。どうして?

 private void StartReceivingData(string ipAddress, int iPort)
    {
        try
        {
            if (!_bContinueReciving)
            {
                //initializeMainSocket(ipAddress, iPort);
                _mSocket = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP);//<------HERE IS RAISED THE EXCEPTION
                _mSocket.Bind(new IPEndPoint(IPAddress.Parse(ipAddress), iPort));
                //  _mSocket.Bind(new IPEndPoint(IPAddress.Loopback, iPort));
                _mSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.HeaderIncluded, true);
                _mSocket.IOControl(IOControlCode.ReceiveAll, new byte[4] { 1, 0, 0, 0 }, new byte[4] { 0, 0, 0, 0 });
                //var 1
                _mSocket.BeginReceive(_buffReceivedData, 0, _buffReceivedData.Length, SocketFlags.None,
                                     new AsyncCallback(OnReceive), null);
                initializeLocalSocket();
            }
            else
            {
                _bContinueReciving = false;
                _mSocket.Close();
            }
        }
        catch (Exception exception)
        {
            Debug.WriteLine(exception);
        }
    }

なぜかはわからない...それは機能したが、今は機能しない。誰かが私を助けることができますか?私はvlcでストリーミングしていますが、パケットを受信したり、レポートを作成したり、プレーヤーにローカルで再ストリーミングしたりしたくありません

40
andrew

ほとんどの場合、ソケットは何らかのプロセスによって保持されています。つかいます netstat -oを選択します。

45
stark

管理者権限でVisual Studioをリロードします。 Windowsソケット(WinSock)では、ローカル管理者なしでSocketType.RAWソケットを作成できません。また、ソリューションを期待どおりに実行するには昇格した権限が必要になることを忘れないでください!

39
Jonathan

まあ、私はこの問題の犯人さえ理解していません。しかし、私の場合、問題はまったく異なります。 netstat -o または netstat -ab、両方とも、私のアプリケーションがリッスンしようとするポート62434で現在リッスンしているアプリがないことを示しています。だから、私には本当に混乱しています。

自分が作ったものを考えてみたところ、機能しなくなりました(以前は機能していました)。それでは、イーサネットアダプタでプライベート仮想LAN(Windows 10のHyper-vを使用)で作成したインターネット共有について考えました。共有をオフにするだけで、問題なく機能しました。

これが同じ問題を抱えている他の人の助けになることを願っています。そしてもちろん、誰かがこれを説明できるなら、あなた自身の答えに、または私の答えにコメントとしてもっと詳細を加えてください。

16
Hopeless

ポートにバインドしようとしたときにdotnet runを使用してdotnet Coreプロジェクトを開始しようとしたときに、この問題が発生しました。

この問題は、プロジェクトを開いた状態でVisual Studio 2017インスタンスを実行しているために発生しました。以前はデバッグのためにVSを介してプロジェクトを開始しましたが、デバッグが終了し、アプリケーションが閉じているように見えても、ポートを保持しているようです。

Visual Studioインスタンスを閉じて「dotnet run」を再度実行すると、問題が解決しました。

8
Gareth

これは、Windowsファイアウォールがポートをブロックする(発信)ときに返されるエラーです。厳密なWebサーバーがあるため、発信ポートはデフォルトでブロックされます。私がしなければならなかったのは、wf.mscでTCPポート番号を許可するルールを作成することだけでした。

3
Rwt

同様の問題がありましたが、ファイアウォールの設定を変更することで修正しました。

以下の手順に従うことができます

  1. [スタート]-> [コントロールパネル]に移動します
  2. [Windowsファイアウォール]をクリックします enter image description here

  3. Windowsファイアウォール内で、「Windowsファイアウォールを介したプログラムまたは機能を許可する」をクリックします enter image description here

  4. [プログラムの許可]内で、[設定の変更]ボタンをクリックします。 [設定の変更]ボタンをクリックすると、[別のプログラムを許可...]ボタンが有効になります。 enter image description here

  5. 「別のプログラムを許可...」ボタンをクリックすると、新しいダイアログボックスが開きます。ソケット例外が発生しているプログラムまたはアプリケーションを選択し、「追加」ボタンをクリックします。 enter image description here

  6. [OK]をクリックして、マシンを再起動します。

  7. 管理者権限でアプリケーション(例外を含む)を実行してください。

これがお役に立てば幸いです。

平和、

サニーマコデ

1
Sunny656

2つの異なるVisual Studioインスタンスに2つの異なるASP.netプロジェクトがある場合、同じエラーが発生しました。
そのうちの1つを閉じると、問題が修正されました。

0
wip

コンピューターをWindows 10周年記念の追加にアップグレードすると、非常によく似たエラーが表示され始め、すべての設定が効果的に吹き飛ばされました。新しいコンピューターで作業して、すべてを初めて使用するように設定するようなものでした...そして、コードがWebサービスを使用しようとしたときに突然このエラーが発生しました。

しかし、本当の犯人であり、私の場合の解決策は、64ビットで実行するオプションをチェックする必要があることでした。この選択は私の場合は失われていました。

[ツール]-> [オプション]-> [プロジェクトとソリューション]-> [Webプロジェクト]-> "64ビットバージョンのIIS ExpressをWebサイトおよびプロジェクトに使用"]。

0
Greg

コマンドウィンドウでiisresetを実行すると修正されました。

0
MFry