2014-11-28 33 views
5

Bu okul projesini, bir istemci ve bir sunucudan oluşan temel sohbet programı olması gerektiğini yazıyorum. Kapatılan sunucu veya istemci programlarını işlemeye çalışıyorum. Eğer Müşteri penceresinde büyük kırmızı X bastığınızdaC# Soket programlama, pencereleri kapatma

Yani, bu olur:

private void Window_Closing(object sender, CancelEventArgs e) 
{ 
    Data msgToSend = new Data(); 
    msgToSend.cmdCommand = Command.Logout; 
    msgToSend.strName = LoginName; 
    byte[] b = msgToSend.ToByte(); 
    ClientSocket.Send(b); 
} 

Birisi çıkış yapmayı olduğunu bunu bildiren sunucuya bir mesaj gönderir, bu yüzden kullanıcıyı kaldırabilir Kullanıcı listesinden vb.

Sorun, sunucu kapatıldığında ortaya çıkar ve istemciye, sunucunun kapatıldığını bildiren bir ileti göndermeye çalışır, böylece istemciler kullanıcıları bilgilendirebilir ve daha sonra kapatılabilir. .

Bu nedenle sunucunun mesajı geliyor ve istemci programı kapanmak üzeredir, ancak yukarıdaki kod, sunucuyu oturum kapatma hakkında yanlış bilgilendirmeye çalışacaktır, ancak sunucu bu zamana kadar zaten kapalı olduğundan, bir bütün olacak hata mesajları çok.

Yukarıdaki yordamda, kodun çalıştırılıp çalıştırılmayacağına karar verebilecek bir tür “if” ifadesine ihtiyacım var, ama ne olması gerektiğine dair bir fikrim yok. Fikirler?

cevap

3

İstemcinin sunucuya bağlı olup olmadığını kontrol edin. Hem Socket ve TcpClient sınıfları bir Connected özelliği vardır:

http://msdn.microsoft.com/en-us/library/system.net.sockets.socket.connected%28v=vs.110%29.aspx http://msdn.microsoft.com/en-us/library/system.net.sockets.tcpclient.connected(v=vs.110).aspx

Sonra yapabilirsiniz:

if (client.Connected) { 
     Data msgToSend = new Data(); 
     msgToSend.cmdCommand = Command.Logout; 
     msgToSend.strName = LoginName; 
     byte[] b = msgToSend.ToByte(); 
     ClientSocket.Send(b); 
}