C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

C++コードを参考にC#コードに

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■92464 / inTopicNo.1)  C++コードを参考にC#コードに
  
□投稿者/ サラリーマンZ (1回)-(2019/09/27(Fri) 22:12:57)

分類:[C#] 

C++ソースコードをもとに、C#で同じプログラムをつくることになりました。

Winsock.dllを使用したプログラムになっていて下記のようにWinsockの初期化をするために
WSAStartup()を利用しているようですが、C#ではどのようにコードを書いたら良いでしょうか?

WSADATA wsadata;

int a ;

a = WSAStartup(0x0101,&wsadata);
if(a!=0)
{return;}


調べるとこんな感じで書いてあったのですが、、、

        [StructLayout(LayoutKind.Sequential)]
        internal struct WSAData
        {
            public short wVersion;
            public short wHighVersion;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 257)]
            public string szDescription;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 129)]
            public string szSystemStatus;
            public short iMaxSockets;
            public short iMaxUdpDg;
            public int lpVendorInfo;
        }

        [DllImport("wsock32.dll")]
        internal static extern int WSAStartup([In] short wVersionRequested,[Out] out WSAData lpWSAData);

        [DllImport("wsock32.dll")]
        internal static extern int WSACleanup();

        private void button2_Click(object sender, EventArgs e)
        {
            WSAData dummy;
            WSAStartup(0x0002, out dummy);
        }


引用返信 編集キー/
■92465 / inTopicNo.2)  Re[1]: C++コードを参考にC#コードに
□投稿者/ サラリーマンZ (2回)-(2019/09/27(Fri) 22:28:02)
追加です。

int a;

a = WSAStartup(0x0002, out dummy);

とコードを書くと、aは0を返してきます。

つまり初期化できていないということですかね?
引用返信 編集キー/
■92466 / inTopicNo.3)  Re[1]: C++コードを参考にC#コードに
□投稿者/ Azulean (1085回)-(2019/09/28(Sat) 06:20:18)
No92464 (サラリーマンZ さん) に返信
> Winsock.dllを使用したプログラムになっていて下記のようにWinsockの初期化をするために
> WSAStartup()を利用しているようですが、C#ではどのようにコードを書いたら良いでしょうか?

ソケットを普通に使うプログラムなら、あえて WSAStartup とか呼ばなくても、単純に Socket クラスを使うなど、.NET アプリケーションとあるべき姿があるような…。
https://docs.microsoft.com/ja-jp/dotnet/framework/network-programming/how-to-create-a-socket

あと、WSAData の最後のメンバーは IntPtr のはずです。

No92465 (サラリーマンZ さん) に返信
> a = WSAStartup(0x0002, out dummy);
> とコードを書くと、aは0を返してきます。
> つまり初期化できていないということですかね?

なぜ、そういった結論になったのでしょうか…?

https://docs.microsoft.com/en-us/windows/win32/api/winsock/nf-winsock-wsastartup
> Return Value
> If successful, the WSAStartup function returns zero.
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ