0
class Program
{
    static Socket m_sock;

    static void Main(string[] args)
    {
        Socket m_sock= new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        .
        .
        .
        m_sock.Connect(ipendLocalhost);
        SendRequest("command");
    }

    static void SendRequest(string sCommand)
    {
       .
       .
     **m_sock.Send(szCommand, iBytesToSend, SocketFlags.None);**
     }

Send メソッドに関しては、NullReferenceException が発生します。デバッグ中 (監視するために m_sock を追加しました) プログラムが SendRequest メソッドに入ると m_sock が null になることがわかります。なぜそれが起こっているのか、どこに問題があるのか​​ 理解できません。助けてください。

4

3 に答える 3

2

m_sockメインの内部およびクラスレベルで定義されています。メインで再度定義する必要はありません。次のように初期化するだけです。

static void Main(string[] args)
    {
        m_sock= new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

Socketが削除されていることに注意してください。

現在、 Main メソッドは local を初期化していm_sockます。そのため、クラス レベルm_sockが null のままであり、後で静的メソッドでアクセスすると例外が発生します。

于 2013-08-26T16:53:47.790 に答える
2

m_sockMain で別のものを宣言するため

Socket m_sock=new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

に変更します

m_sock=new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
于 2013-08-26T16:54:16.337 に答える
2

問題は Main での宣言にあり、Socket m_sock=クラス レベルでフィールドを非表示にします。

static Socket m_sock;
static void Main(string[] args)
{
    Socket m_sock = new Socket // Create a new Socket in m_sock from the Main method only
    SendRequest("command");
}

static void SendRequest(string sCommand)
{
  m_sock.Send() // Uses the socket at the Class level, which is not initialized
}

初期化を次のように変更します

static void Main(string[] args)
{
    m_sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    m_sock.Connect(ipendLocalhost);

    SendRequest("command");
}

またはクラスレベルの宣言を削除して変数として渡します

static void Main(string[] args)
{
    Socket m_sock= new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    m_sock.Connect(ipendLocalhost);

    SendRequest(m_sock, "command");
}

static void SendRequest(Socket m_sock, string sCommand)
{
   m_sock.Send(szCommand, iBytesToSend, SocketFlags.None);
}
于 2013-08-26T16:57:15.033 に答える