Avatar billede fbisoft Nybegynder
15. september 2008 - 15:48 Der er 16 kommentarer og
1 løsning

hvem er online

hejsa jeg har følgende spørgsmål,
jeg vil gerne kunne sende en besked tilbage til den den kom fra og ikke alle klienter..

koden er fra serveren


public static Hashtable htUsers = new Hashtable(30);

public static void SendMessage(string From, string Message)
        {
            StreamWriter swSenderSender;
           
            // First of all, show in our application who says what
            e = new StatusChangedEventArgs(From + " siger: " + Message);
            OnStatusChanged(e);
           
            // Create an array of TCP clients, the size of the number of users we have
            TcpClient[] tcpClients = new TcpClient[ChatServer.htUsers.Count];
            // Copy the TcpClient objects into the array
            ChatServer.htUsers.Values.CopyTo(tcpClients, 0);
         

            // Loop through the list of TCP clients
         
                for (int i = 0; i < tcpClients.Length; i++)
            {
                // Try sending a message to each
                try
                {
                    // If the message is blank or the connection is null, break out
                    if (Message.Trim() == "" || tcpClients[i] == null)
                    {
                        continue;
                    }
                    // Send the message to the current user in the loop
                   
                    swSenderSender = new StreamWriter(tcpClients[i].GetStream());
                    swSenderSender.WriteLine(From + " siger: " + Message);
                    swSenderSender.Flush();
                    swSenderSender = null;
                }
                catch // If there was a problem, the user is not there anymore, remove him
                {
                    RemoveUser(tcpClients[i]);
                }
            }
        }


mvh
fbisoft
Avatar billede arne_v Ekspert
15. september 2008 - 15:54 #1
Hvis du kun vil sende til en, saa skal du jo finde vedkommendes TcpClient enten udfra
navn eller IP addresse.

Det er ikke indlysende udfra hvordan.
Avatar billede arne_v Ekspert
15. september 2008 - 15:56 #2
Hvis .NET version er 2.0 eller nyere saa kan Dictionary<> anbefales fremfor Hashtable.

Og jeg tvivler paa at det er noevendigt at kopiere fra Hashtable til et array - du kan
godt iterere over en Hashtable.
Avatar billede fbisoft Nybegynder
15. september 2008 - 15:57 #3
navnet ligger i hashtabellen, ved bare ikke hvordan jeg finder navnet/eller hvad nummer han ligger i,  i tcpClient[?]
Avatar billede fbisoft Nybegynder
15. september 2008 - 15:59 #4
det jeg grundlæggende vil er at sende en besked fra en klient til en server og den skal sende beskeden tilbage til klienten, og jeg vil gerne have at derer mange klienter som får deres egne beskeder tilbage
Avatar billede arne_v Ekspert
15. september 2008 - 16:16 #5
htUsers["navn"] boer returnere den TcpClient som hoerer til navnet.
Avatar billede fbisoft Nybegynder
16. september 2008 - 07:29 #6
det jeg grundlæggende vil er at sende en besked fra en klient til en server og den skal sende beskeden tilbage til klienten, og jeg vil gerne have at derer mange klienter som får deres egne beskeder tilbage.  er der eksempel på det? det skal bare være simpelt..
Avatar billede fbisoft Nybegynder
16. september 2008 - 07:32 #7
htUsers["navn"] får jeg en system.net.socket.tcpClient tilbage, og hvis jeg sætter toString bagefter
Avatar billede fbisoft Nybegynder
16. september 2008 - 11:11 #8
hvordan får jeg fat i elementerner i tcpclient?  htusers er en hashtabel

TcpClient[] tcpClients = new TcpClient[ChatServer.htUsers.Count];
            // Copy the TcpClient objects into the array
            ChatServer.htUsers.Values.CopyTo(tcpClients, 0);
Avatar billede arne_v Ekspert
16. september 2008 - 11:13 #9
htUsers["navn"] giver dig en TcpClient som du kan skrive til !
Avatar billede fbisoft Nybegynder
16. september 2008 - 11:22 #10
denne metode sender til alle med jeg vil bare have at serveren sender beskeden tilbage til klienten og ikke til alle de andre...

public static void SendMessage(string From, string Message)
        {
            StreamWriter swSenderSender;
           
            // First of all, show in our application who says what
            e = new StatusChangedEventArgs(From + " siger: " + Message);
            OnStatusChanged(e);
           
            // Create an array of TCP clients, the size of the number of users we have
            TcpClient[] tcpClients = new TcpClient[ChatServer.htUsers.Count];
            // Copy the TcpClient objects into the array
            ChatServer.htUsers.Values.CopyTo(tcpClients, 0);
          for (int i = 0; i < tcpClients.Length; i++)
            {
             
               
                try
                {
                   
                    if (Message.Trim() == "" || tcpClients[i] == null)
                    {
                        continue;
                    }
                   
                   
                    swSenderSender = new StreamWriter(tcpClients[i].GetStream());
                 
                   
                       
                    swSenderSender.WriteLine(From + " siger: " + Message);
                    swSenderSender.Flush();
                    swSenderSender = null;
                 
                   
                   

                }
                catch // If there was a problem, the user is not there anymore, remove him
                {
                    RemoveUser(tcpClients[i]);
                }
            }
        }
Avatar billede fbisoft Nybegynder
16. september 2008 - 11:40 #11
hej arne du skriver "htUsers["navn"] giver dig en TcpClient som du kan skrive til"

det skal så sendes videre til swSenderSender (når den bliver oprettet)
ellers hvad? jeg er bare ikke sikker på hvad tcpclient indeholder..
har virkelig brug for hjælp
på forhånd tak..
Avatar billede fbisoft Nybegynder
16. september 2008 - 11:55 #12
det her virker ikke 
swSenderSender = new StreamWriter((TcpClient) htUsers["karsten"]);
Avatar billede fbisoft Nybegynder
16. september 2008 - 12:01 #13
tror jeg måske har løst det
swSenderSender = new StreamWriter(((TcpClient) htUsers[From]).GetStream());

checker lige efter..
Avatar billede fbisoft Nybegynder
17. september 2008 - 12:01 #14
hej arne, send lige et svar..
forøvrigt har jeg brug for at oversættet dette til vb

while ((strResponse = srReceiver.ReadLine()) != "")
                {//do something}


den oversætter til :

While (strResponse = srReceiver.ReadLine()) <> ""

og det er forkert.. får bl.a. en invalidCastException

håber du kan hjælpe
Avatar billede arne_v Ekspert
17. september 2008 - 12:55 #15
line = sr.ReadLine
While Not (line Is Nothing)
    ...
    line = sr.ReadLine
End While

er den konstruktion jeg plejer at bruge. Den maa kunne rettes til for "" ogsaa.
Avatar billede arne_v Ekspert
17. september 2008 - 12:56 #16
og svar
Avatar billede arne_v Ekspert
30. oktober 2008 - 02:24 #17
så mangler du bare at acceptere svaret
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester