J'utilise des sockets C# synchrones très simples pour une affectation. L'affectation consiste à créer un programme de chat peer-to-peer, de sorte que chaque instance doit fonctionner à la fois comme client et comme serveur. fonctionne Mon grand programme quand je l'ai mis en mode écoute: (StateBall est un objet qui passe des variables d'état autour)Vérifiez si une socket est connectée avant d'envoyer des données
public void startListening()
{
lState = new StateBall();
IPEndPoint peer = new IPEndPoint(StateBall.host, StateBall.port);
lSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream,
ProtocolType.Tcp);
try
{
lSocket.Bind(peer);
lSocket.Listen(10);
Console.WriteLine("Waiting for a connection...");
StateBall.updateText("Waiting for a Connection...");
client = lSocket.Accept();
StateBall.toSend=StateBall.ourName;
StateBall.updateText("Connection made! Sending our name...");
...
Mais quand je tente de démarrer une deuxième instance et se connecter à une instance déjà en cours d'exécution, il se bloque juste et ne se connecte pas.
D'après ce que j'ai vu sur ce site et le reste du Web que je pouvais vérifier une connexion pré-existante en utilisant quelque chose comme:
try{
lsocket.Connect(peer);
}
catch(Exception ex){
//check for SocketException type and errors
}
Et puis continuer avec mon programme, mais est-il un moyen propre d'intégrer cette vérification initiale dans le code déjà existant? Ou existe-t-il un meilleur moyen de vérifier un hôte actif avant d'essayer d'appeler Connect sur mon objet socket?