Partage
  • Partager sur Facebook
  • Partager sur Twitter

Erreur à l'ouverture de plusieurs Client C# Réseau

Anonyme
23 novembre 2017 à 20:09:40

Bonjour, je m'entraîne avec les threads et le réseau en C# j'essaye de créer un chat client / serveur ou le serveur renvoie à tout les clients le message d'un des clients. Seulement j'essaye avec le broadcast sauf que pour le tester il faut que j'ouvre plusieurs clients sur le même pc . Et la boummm ça plante ... Si vous pouviez m'aider pour ceci ce serait très gentil :)

Merci :)

  • Partager sur Facebook
  • Partager sur Twitter
23 novembre 2017 à 20:23:26

Avoir plusieurs clients sur la même machine ne devrait poser aucun problème particulier.

>Et la boummm ça plante

Mais encore ?

Code + Message d'erreur, SVP.

  • Partager sur Facebook
  • Partager sur Twitter
Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
Anonyme
23 novembre 2017 à 20:47:17

Effectivement je l'ai écrit un peu trop vite :/
Le message d'erreur :
Exception non gérée : System.Net.Sockets.SocketException: Une seule utilisation de chaque adresse de socket (protocole/adresse réseau/port) est habituellement autorisée
   à System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, SocketAddress socketAddress)
   à System.Net.Sockets.Socket.Bind(EndPoint localEP)
   à System.Net.Sockets.UdpClient..ctor(Int32 port, AddressFamily family)
   à System.Net.Sockets.UdpClient..ctor(Int32 port)
   à Client.Program.Main(String[] args) dans C:\Users\Asstryfi\source\repos\ConsoleApp1\ConsoleApp1\Program.cs:ligne 14
Le code de mon client : 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;

namespace Client
{
    class Program
    {
        static void Main(string[] args)
        {
            UdpClient client = new UdpClient(5053);
            while(true)
            {
                Console.Write("> ");
                string msg = Console.ReadLine();

                byte[] data = Encoding.Default.GetBytes(msg);

                client.Send(data, data.Length, "127.0.0.1", 1523);
            }
        }
    }
}
Un client basique quoi
Et le serveur envoie un message aux clients via la variable / propriété _broadcast :
_broadcast.Send(cd.ByteMessage, cd.ByteMessage.Length);
Qui est connecté comme ceci :
            _broadcast = new UdpClient();
            _broadcast.EnableBroadcast = true;
            _broadcast.Connect(new IPEndPoint(IPAddress.Broadcast, 5053));
Voila ! Normalement j'ai tout envoyé ;)
  • Partager sur Facebook
  • Partager sur Twitter
24 novembre 2017 à 11:02:20

OK, en UDP avec des port client en dur.

Normal.

Sauf acrobaties de multiplexing, vous ne pouvez avoir qu'une personne qui écoute sur un port en même temps.

Le plus simple, c'est de passer l'le port d'écoute en paramètre de votre programme et de faire un script qui démarre les clients avec chacun un numéro de port différent.

  • Partager sur Facebook
  • Partager sur Twitter
Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
19 octobre 2022 à 15:43:38

Bonjour,

Je tiens tout d'abord a preciser que je ne m'y connais pas vraiment dans ce  domaine soyez indulgent s'il vous plait

le code est censé afficher les jumeaux 3D de mes mains sur unity lorsque je présente mes main devant la webcam. mais lorsque je run unity je reçois les erreurs je ne comprend pas le problème. voila le code ci-joint; et les erreurs sur unity en image

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class HandTracking1 : MonoBehaviour
{
    // Start is called before the first frame update
    public UDPReceive udpReceive;
    public GameObject[] handPoints;
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        string data = udpReceive.data;

        //data = data.Remove(0, 1);

        //data = data.Remove(data.Length-1, 1);
        //print(data);
        string[] points = data.Split(',');
        //print(points[0]);


        for (int i = 21; i<42; i++)
        {
            float x = 8-float.Parse(points[i*3])/100;
            float y = float.Parse(points[i*3 +1])/100;
            float z = float.Parse(points[i*3 +2])/100;

            //print(i);

            handPoints[i].transform.localPosition = new Vector3(x, y, z);
            

        }

LeslieFouda a écrit:

quand je run le sur unity je recois ces error... le code est sencé afficher les jumeaux 3D de mes mains lorsque je place mes mains devant la camera voici les errerur:       ArgumentOutOfRangeException: Index and count must refer to a location within the string. Parameter name: count System.String.Remove (System.Int32 startIndex, System.Int32 count) (at <6073cf49ed704e958b8a66d540dea948>:0) HandTracking.Update () (at Assets/HandTracking.cs:20)        IndexOutOfRangeException: Index was outside the bounds of the array. HandTracking1.Update () (at Assets/HandTracking1.cs:30)        SocketException: Une seule utilisation de chaque adresse de socket (protocole/adresse réseau/port) est habituellement autorisée.  System.Net.Sockets.Socket.Bind (System.Net.EndPoint localEP) (at <6d7c4c8dd3624dc596686fb7270ae1e6>:0) System.Net.Sockets.UdpClient..ctor (System.Int32 port, System.Net.Sockets.AddressFamily family) (at <6d7c4c8dd3624dc596686fb7270ae1e6>:0) System.Net.Sockets.UdpClient..ctor (System.Int32 port) (at <6d7c4c8dd3624dc596686fb7270ae1e6>:0) UDPReceive.ReceiveData () (at Assets/UDPReceive.cs:33) System.Threading.ThreadHelper.ThreadStart_Context (System.Object state) (at <6073cf49ed704e958b8a66d540dea948>:0) System.Threading.ExecutionContext.RunInternal (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) (at <6073cf49ed704e958b8a66d540dea948>:0) System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) (at <6073cf49ed704e958b8a66d540dea948>:0) System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state) (at <6073cf49ed704e958b8a66d540dea948>:0) System.Threading.ThreadHelper.ThreadStart () (at <6073cf49ed704e958b8a66d540dea948>:0) UnityEngine.<>c:<RegisterUECatcher>b__0_0(Object, UnhandledExceptionEventArgs)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class HandTracking1 : MonoBehaviour
{
    // Start is called before the first frame update
    public UDPReceive udpReceive;
    public GameObject[] handPoints;
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        string data = udpReceive.data;

        //data = data.Remove(0, 1);

        //data = data.Remove(data.Length-1, 1);
        //print(data);
        string[] points = data.Split(',');
        //print(points[0]);


        for (int i = 21; i<42; i++)
        {
            float x = 8-float.Parse(points[i*3])/100;
            float y = float.Parse(points[i*3 +1])/100;
            float z = float.Parse(points[i*3 +2])/100;

            //print(i);

            handPoints[i].transform.localPosition = new Vector3(x, y, z);
            

        }


    }
}


    }
}




-
Edité par LeslieFouda 19 octobre 2022 à 15:51:21

  • Partager sur Facebook
  • Partager sur Twitter
19 octobre 2022 à 16:01:14

l'erreur indique une erreur d'indice en dehors de la plage en ligne 30 de HandTracking1; donc  points[i*3]  n'est pas accessible pour une certaine valeur de i

Et tu sembles ouvrir plusieurs sockets identiques

Et tu aurais du créer ton propre sujet plutôt que d'utiliser celui d'un autre :p

-
Edité par umfred 19 octobre 2022 à 16:17:12

  • Partager sur Facebook
  • Partager sur Twitter
19 octobre 2022 à 18:49:36

Bonjour,

Le message qui suit est une réponse automatique activée par un membre de l'équipe. Les réponses automatiques leur permettent d'éviter d'avoir à répéter de nombreuses fois la même chose, ce qui leur fait gagner du temps et leur permet de s'occuper des sujets qui méritent plus d'attention.
Nous sommes néanmoins ouverts et si vous avez une question ou une remarque, n'hésitez pas à contacter la personne en question par Message Privé.

Pour plus d'informations, nous vous invitons à lire les règles générales du forum

Déterrage

Citation des règles générales du forum :

Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.

Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre.
En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.

Au lieu de déterrer un sujet il est préférable :

  • soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
  • soit de créer un nouveau sujet décrivant votre propre contexte
  • ne pas répondre à un déterrage et le signaler à la modération

Je ferme ce sujet. En cas de désaccord, me contacter par MP.

  • Partager sur Facebook
  • Partager sur Twitter

Pas d'aide concernant le code par MP, le forum est là pour ça :)