Avatar billede alex_sleiborg Nybegynder
19. januar 2006 - 18:41 Der er 4 kommentarer og
1 løsning

Sende filer via socket

Har søgt lidt rundt omkring på nettet. Og har også fundet nogle eksempler på google og her på eksperten. Men har stadig ikke fået det til at virke. Jeg vil sende nogle filer fra en klient, til en server via socket. Jeg har åbnet en socket imellem klient og server, og jeg tror også min klient sender filen som den skal. Altså som et byte array???

Men problemmet ligger i at modtage det på serveren. Jeg kan finde ud af modtage en streng på serveren. Men det hjælper ikke når det er et byte array

Her er koden der modtager en streng, hvordan får jeg den til at modtage et byte array og smide det ned i en fil?

SocketPacket socketData = (SocketPacket)asyn.AsyncState;

                int iRx = 0;
                iRx = socketData.m_currentSocket.EndReceive(asyn);
                char[] chars = new char[iRx + 1];
                System.Text.Decoder d = System.Text.Encoding.UTF8.GetDecoder();
                int charLen = d.GetChars(socketData.dataBuffer,
                                        0, iRx, chars, 0);
                System.String szData = new System.String(chars);
                                       
                WaitForData(socketData.m_currentSocket);
Avatar billede spif2001 Nybegynder
20. januar 2006 - 09:20 #1
Her bruger jeg filestream:

byte[] byteArr = /*få fat i byteArr*/
FileStream fs = new FileStream("FilePath",FileMode.Create,FileAccess.Write,FileShare.None);
fs.Write(byteArr,0,byteArr.Length);
fs.Flush();
fs.Close();
Avatar billede spif2001 Nybegynder
20. januar 2006 - 09:38 #2
Det var jo så kun gemme delen :) - læste dit spørgsmål lidt for hurtigt.

Bruger BinaryReader selv til at kommunikere med, men har da en artikel her om Socket:

http://www.codeproject.com/csharp/socketsincs.asp
Avatar billede alex_sleiborg Nybegynder
20. januar 2006 - 13:12 #3
Her en den der sender en xml fil. Altså klienten

private void button1_Click(object sender, EventArgs e)
        {
            if (this.txt_ServerIP.Text == "" || this.txt_Port.Text == "")
            {
                MessageBox.Show("Indtast både ip og port nummer");
                return;
            }
            else if (m_clientSocket != null)
            {
                MessageBox.Show("Du har allerede oprettet forbindelse");
            }
            else
            {
                try
                {
                    m_clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);


                    IPAddress ip = IPAddress.Parse(this.txt_ServerIP.Text);
                    int iPortNo = System.Convert.ToInt16(this.txt_Port.Text);
                    IPEndPoint ipEnd = new IPEndPoint(ip, iPortNo);
                    m_clientSocket.Connect(ipEnd);
                    if (m_clientSocket.Connected)
                    {
                        MessageBox.Show("Der blev oprettet forbindelse :)");
                        WaitForData();
                                                       
                        if (m_clientSocket != null)
                        {
                            m_clientSocket.Send(Certifikat(), Certifikat().Length, SocketFlags.None);
                        }
                    }
                }
                catch (SocketException se)
                {
                    MessageBox.Show("Forbindelses Fejl\n" + se.Message);
                }
            }
        }

Og så den tilhørende metode

private byte[] Certifikat()
        {
            if (File.Exists("certifikat.xml"))
            {
                FileStream FS = new FileStream("certifikat.xml", FileMode.Open);
                long FileSize = FS.Length;
                byte[] cer = new byte[(int)FileSize];
                FS.Read(cer, 0, (int)FileSize);
                FS.Close();

                return cer;
            }
            else
            {
                return null;
            }
        }

Der er også nogle andre metoder i klienten. Men er det den rigtige måde at sende xml filen på???
Avatar billede alex_sleiborg Nybegynder
24. januar 2006 - 11:50 #4
Mit problem ligger i at modtage det byte array, jeg sender afsted.

Hvordan modtager jeg det, og gemmer det i en fil?
Avatar billede alex_sleiborg Nybegynder
13. marts 2006 - 19:57 #5
Lukker
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