2013-08-26 1 views
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);** 
    } 

널 (null)이된다. 디버그 (내가 볼 m_sock 추가) 프로그램이 SendRequest 메서드를 입력 할 때 볼 m_sock null이됩니다. 나는 왜 그것이 일어나고 있는지 그리고 문제가 어디에 있는지 이해할 수 없다. 도와주세요. Socket 제거콘솔 프로그램은 정적 방법은 소켓

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

주의 :

+0

로 전달에 초기화'소켓 m_sock '. 같은 이름을 가진 지역 변수를 선언하고 싶지 않다면 전역 변수를 초기화하기 만하면됩니다. – PoweredByOrange

답변

2

m_sock은 홈페이지뿐만 아니라 클래스 수준에서 내부 정의, 당신처럼, 그냥 초기화, 기본에서 다시 정의 할 필요가 없습니다.

현재 Main 메서드는 로컬 m_sock을 초기화하기 때문에 클래스 레벨 m_sock이 null이되고 나중에 정적 메서드에서 액세스 할 때 예외가 발생합니다. 당신이

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

Socket m_sock= 클래스 수준에서 필드를 숨 깁니다. =`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); 
} 
+0

이 원인이지만 해결책은 무엇입니까? –

2

문제는 홈페이지에 선언에서 오는에 홈페이지

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

변화 그 안에 또 다른 m_sock를 선언하기 때문에

+0

+1을 건네 주면 좋습니다. 'static '변수는 신중하게 사용해야하며이 경우에도 처리해야합니다. –

관련 문제