2011-08-07 2 views
0

'form1'과 'form2'가 있습니다.C# 소켓 연결이 다음 winform에서 손실되었습니다.

현재 C#에서 TCP IP 소켓을 사용 중입니다. im이 form1의 내 서버에 연결되면 form2가로드됩니다. 그러나 form2에서 im은 이미 연결되어 있지 않으며 연결되지 않았다는 오류 메시지가 나타납니다.

내 애플리케이션의 모든 양식에 연결되어 있는지 확인하려면 어떻게해야합니까? 지금 내 PC에서 테스트 중입니다. 그것의 간단한 C# 채팅 응용 프로그램과 메신저 꽤 C#에 새로운.

Form1이

serverStream = clientSocket.GetStream(); 
byte[] outStream = System.Text.Encoding.ASCII.GetBytes(tbxMessageBox.Text + "$"); 
if (serverStream != null) 
{ 
    serverStream.Write(outStream, 0, outStream.Length); 
    serverStream.Flush(); 
    tbxMessageBox.Clear(); 
} 

감사합니다 (아래의 서버에 나의 메시지 보내기 버튼의 코드는)

clientSocket.Connect(tbxIP.Text, 8888); 
serverStream = clientSocket.GetStream(); 
string faciName = "Facilitator:" + "$"; 

byte[] outStream = System.Text.Encoding.ASCII.GetBytes(faciName); 
serverStream.Write(outStream, 0, outStream.Length); 
serverStream.Flush(); 


Thread ctThread = new Thread(getMessage); 
ctThread.Start(); 

형태 2 (아래 내 연결 단추 코드입니다).

+2

동반 코드는 * 코드에서 문제를 찾기 위해 우리에게 도움이 될 수 있습니다. * – foxy

+0

코드를 보여줄 수 있습니까? –

답변

2

는 IMO이 접근 할 수있는 방법은 (대신 소켓 기반 API의), 다음

즉, 폼이 인스턴스에 대한 참조를 전달 동작을 제공합니다 몇 가지 클래스로 모든 소켓 동작을 캡슐화하는 것입니다
ServerComms comms = new ServerComms(address); 
comms.Open(); 
using(var mainForm = new MainForm()) { 
    mainForm.Comms = comms; 
    Application.Run(mainForm); 
} 

분명히 당신의 MainForm 예는 이후이를 전달할 수 있습니다

void ShowChildForm() { 
    var childForm = new ChildForm(); 
    childForm.Comms = Comms; 
    childForm.Show(); 
} 
관련 문제