Avatar billede aniels21 Nybegynder
18. oktober 2004 - 15:27 Der er 14 kommentarer og
2 løsninger

TCP filoverførsel fejl

Heysa

Jeg leger lidt med TCP-filoverførsel og har kopieret følgende kode fra en bog:

----SNIP----
public Form1()
{
    //
    // Required for Windows Form Designer support
    //
    InitializeComponent();

    //
    // TODO: Add any constructor code after InitializeComponent call
    //
    Thread thread = new Thread(new ThreadStart(Listen));
    thread.Start();
public void Listen()
{

    TcpListener tcpListener = new TcpListener(2112);
      tcpListener.Start();

    TcpClient tcpClient = tcpListener.AcceptTcpClient();

    NetworkStream ns = tcpClient.GetStream();
    StreamReader sr = new StreamReader(ns);
    string result = sr.ReadToEnd();
        Invoke(new UpdateDisplayDelegate(UpdateDisplay), new Object[] {result});

    tcpClient.Close();
    tcpListener.Stop();
}

public void UpdateDisplay(string text)
{
    txtDisplay.Text=text;
}
protected delegate void UpdateDisplayDelegate(string text);

---SNIP slut---

Og en tilsvarende applikation til en client som med følgende simple kode skulle kunne sende en fil:

TcpClient tcpClient = new TcpClient("localhost",2112);
            NetworkStream ns = tcpClient.GetStream();
            FileStream fs = File.Open(openFileDialog1.FileName, FileMode.Open);
           
            int data = fs.ReadByte();
            while(data != -1)
            {
                ns.WriteByte((byte)data);
                data = fs.ReadByte();
            }
            fs.Close();
            ns.Close();
            tcpClient.Close();


Men når jeg vil overføre en fil får jeg følgende fejl:

"Der kunne ikke oprettes forbindelse, fordi værtscomputeren aktivt nægtede det."

Jeg har prøvet uden firewall. Hvad er galt??
Avatar billede aniels21 Nybegynder
18. oktober 2004 - 15:32 #1
Måske er det et forkert forum at stille spørgsmålet i, da det virker fint når jeg kører begge applikationer på samme computer. Netværksproblem?

Jeg kan sagtes pinge frem og tilbage mellem de to computere..
Avatar billede finger Nybegynder
18. oktober 2004 - 15:37 #2
har du de rigtige security settings på mapper/filer på de 2 computere?

hvis du skubber filen til en computer:
prøv at dele en mappe med skrive rettigheder på den computer der modtager filen. Angiv at alle kan skrive til mappen.

hvis du henter en fil fra en computer:
prøv at dele en mappe med læse rettigheder på den computer du henter filen fra. Angiv at alle kan læse fra mappen.
Avatar billede finger Nybegynder
18. oktober 2004 - 15:38 #3
ellers er det altid en god ide med IO kode at pakke det ind i en try catch.
så kan du også bedre undersøge den kastede exception for hvad fejlen er.
Avatar billede arne_v Ekspert
18. oktober 2004 - 15:44 #4
Ovenstående kode bruger "localhost" !?
Avatar billede aniels21 Nybegynder
18. oktober 2004 - 15:56 #5
arne_v> yup, er det forkert til oprettelsen af klienten? Er det fjerncomputerens IP eller navn den skal have?
Avatar billede arne_v Ekspert
18. oktober 2004 - 15:59 #6
Jeg er ret sikker på at første argument til TCPClient constructor er navn eller
IP numme rpå den server der skal connectes til.
Avatar billede aniels21 Nybegynder
18. oktober 2004 - 16:03 #7
Du har ret, det er Host-navnet der skal angives der. Men jeg får stadig samme fejl. Kan det være fordi jeg vil læse noget direkte ind i en tekstBox. Ville det være noget andet hvis jeg som "finger" siger prøver at oprette en fil i en mappe der erdelt med skrive-rettigheder?
Avatar billede arne_v Ekspert
18. oktober 2004 - 16:08 #8
Du starter server uden fejl og du starter derefter client på en anden maskine som
har adgang til TCP port 2112 på server og den får connection refused ?
Avatar billede arne_v Ekspert
18. oktober 2004 - 16:08 #9
Jeg tror ikke på fil adgang
Avatar billede aniels21 Nybegynder
18. oktober 2004 - 16:13 #10
Ja, jeg starter server, og derefter clienten, finder en fil (txt) og sender. Her kommer fejlen på clienten.
Avatar billede finger Nybegynder
18. oktober 2004 - 16:18 #11
prøv at pakke det ind i:

try{
TcpClient tcpClient = new TcpClient("localhost",2112);
            NetworkStream ns = tcpClient.GetStream();
            FileStream fs = File.Open(openFileDialog1.FileName, FileMode.Open);
           
            int data = fs.ReadByte();
            while(data != -1)
            {
                ns.WriteByte((byte)data);
                data = fs.ReadByte();
            }
}
catch(Exception ex)
{
//læs exception her fx
//Console.Write(ex.tostring());
}
finally
{
            fs.Close();
            ns.Close();
            tcpClient.Close();
}
Avatar billede finger Nybegynder
18. oktober 2004 - 16:19 #12
husk at erklære udenfor try, hvis du bruger ovenstående eksempel. Ellers kan du ikke finde dem i finally blokken
Avatar billede finger Nybegynder
18. oktober 2004 - 16:20 #13
NetworkStream ns;
FileStream fs;
TcpClient tcpClient;

try{
            tcpClient = new TcpClient("localhost",2112);
            ns = tcpClient.GetStream();
            fs = File.Open(openFileDialog1.FileName, FileMode.Open);
           
            int data = fs.ReadByte();
            while(data != -1)
            {
                ns.WriteByte((byte)data);
                data = fs.ReadByte();
            }
}
catch(Exception ex)
{
//læs exception her fx
//Console.Write(ex.tostring());
}
finally
{
            fs.Close();
            ns.Close();
            tcpClient.Close();
}
Avatar billede aniels21 Nybegynder
18. oktober 2004 - 16:25 #14
Nu virker det -og mit nye problem er: at jeg ANER ikke hvad jeg gjorde. Jeg prøvede at oprette en fil og gemme den. Det virkede, så udkommenterede jeg "gemme-fil-koden" og prøvede med den gamle kode, og det virker også nu. WHAT GIVES?

Hvis en af jer eller begge vil have point, så smid lige et svar.
Tak for hjælpen.

PS: det er ikke nødvendigt at dele mappen med skriverettigheder.
Avatar billede finger Nybegynder
18. oktober 2004 - 18:49 #15
det var da en skam du ikke opdagede hvad fejlen var :(
Avatar billede arne_v Ekspert
18. oktober 2004 - 19:00 #16
svar
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