Velena Skrevet 22. juni 2008 Del Skrevet 22. juni 2008 (endret) Har nå sett på en artikkel som forklarer litt om hvordan du lager et instant messenger program(som du forøvrig kan finne her: http://www.informit.com/articles/article.a...2&seqNum=1), men støter på et uventet problem. Dette er eksempelkoden som forfatteren bruker(har gjort noen minimale forandringer, men tror ikke det vil ha noe å si): using System; using System.Windows.Forms; using System.Drawing; using System.Net.Sockets; using System.Threading; using System.IO; using System.ComponentModel; namespace ChatExample { public partial class Form1 : Form { public delegate void Invoker(String t); private Thread thdListener; private TcpListener objListener; private TcpClient objClient; private Button btSend = new Button(); private RichTextBox rtbMessage = new RichTextBox(); private RichTextBox rtbType = new RichTextBox(); private string strFriend; private string strMe; public Form1() { InitializeComponent(); strFriend = "192.168.0.2";//IP addressen til min laptop strMe = "Velena"; thdListener = new Thread(new ThreadStart(this.Listen)); thdListener.Start(); rtbMessage.Dock = DockStyle.Top; rtbMessage.Size = new Size(300, 200); rtbType.Location = new Point(0, 205); rtbType.Size = new Size(240, 65); btSend.Text = "Send"; btSend.Click += new EventHandler(this.SendText); btSend.Size = new Size(50, 50); btSend.Location = new Point(240, 205); this.Text = ".NET IM"; this.Size = new Size(300, 300); this.Closing += new CancelEventHandler(this.CloseMe); this.Controls.Add(btSend); this.Controls.Add(rtbMessage); this.Controls.Add(rtbType); } private void SendText(Object Sender, EventArgs e) { rtbMessage.Text += strMe + ": " + rtbType.Text + "\n"; objClient = new TcpClient(strFriend, 1000); StreamWriter w = new StreamWriter(objClient.GetStream()); w.Write(rtbType.Text + "\n"); w.Flush(); objClient.Close(); rtbType.Text = ""; } private void Listen() { string strTemp = ""; objListener = new TcpListener(1000); objListener.Start(); do { TcpClient objClient = objListener.AcceptTcpClient(); StreamReader objReader = new StreamReader(objClient.GetStream()); while (objReader.Peek() != -1) { strTemp += Convert.ToChar(objReader.Read()).ToString(); } object[] objParams = new object[] { strTemp }; strTemp = ""; this.Invoke(new Invoker(this.ShowMessage), objParams); } while (true != false); } private void ShowMessage(String t) { rtbMessage.Text += strFriend + ": " + t + "\n"; } private void CloseMe(Object Sender, CancelEventArgs e) { objListener.Stop(); } } } //fant forresten IPen min med denne koden: String hostName = Dns.GetHostName(); IPHostEntry ipEntry = Dns.GetHostByName(hostName); IPAddress[] addr = ipEntry.AddressList; string theIP= addr[0].ToString(); Det som skjer når jeg bruker denne koden til å sende en melding til laptoppen min (laptoppen er selvsagt på, med det samme programmet kjørende) er helt enkelt at programmet låser seg. Artikkelen nevnte at dette kunne skje hvis AcceptTcpClient aldri mottar noen melding, men sa at dette ikke ville være noe problem hvis denne delen av koden kjørte i en annen thread enn mainthreaden, noe som får meg til å utelukke at det er det som skjer. Er det noen som kan hjelpe? Edit: En ting som kan være interressant er at programmet fungerer helt fint hvis jeg endrer IPen til min egen og sender meldinger til den samme datamskinen som programmet kjører på. Endret 22. juni 2008 av Velena Lenke til kommentar
GeirGrusom Skrevet 22. juni 2008 Del Skrevet 22. juni 2008 Kanskje jeg bare forvirrer deg mer nå, men jeg synes denne koden gjør ting litt feil, så jeg skrev en annen IM klient. Skriv /connect [iP addresse eller navn] for å koble til en maskin, /name setter et navn foran teksten din. Koden bruker to tråder, en som lytter etter tilkoblinger, og en som lytter etter om noen sier noe. IM.zip IM_bin.zip Lenke til kommentar
Velena Skrevet 22. juni 2008 Forfatter Del Skrevet 22. juni 2008 (endret) Takker så mye GeirGrusom, skal se hva jeg kan lære fra koden ^^. Edit: Når jeg prøver å skape en forbindelse mellom datamskinene, får jeg en SocketException =/. Feilmelding lyder: Unable to connect to 192.168.0.2: Et tilkoblingsforsøk mislyktes fordi den tilkoblede parten ikke svarte på riktig måte etter en tidsperiode, eller den etablerte tilkoblingen mislyktes fordi den tilkoblede verten ikke svarte 192.168.0.2:4321 Hva kommer dette av? Har det noe å si at laptoppen er tilkoblet via router? Endret 22. juni 2008 av Velena Lenke til kommentar
Mr Burns Skrevet 23. juni 2008 Del Skrevet 23. juni 2008 Har du skrudd av Firewallen i windows? Lenke til kommentar
Velena Skrevet 23. juni 2008 Forfatter Del Skrevet 23. juni 2008 (endret) Bruker Avast On-Access protection, har prøvd å skru den av mens jeg prøver å koble til. Fikk akkurat det samme resultatet. Edit: Har nå prøvd med Windows brannmuren av også, noe som ikke hjalp. Endret 23. juni 2008 av Velena Lenke til kommentar
Velena Skrevet 26. juni 2008 Forfatter Del Skrevet 26. juni 2008 (endret) Kan det ha noe å si at laptoppen min bruker Vista? (Har opplevd noen problemer ang. kompabilitet med vista tidligere). Edit: Tror jeg fant det ut, min laptop bruker et trådløst nettverk, må jeg ikke da forwarde porten som programmet bruker for at den skal kunne kommunisere? Endret 26. juni 2008 av Velena Lenke til kommentar
GeirGrusom Skrevet 26. juni 2008 Del Skrevet 26. juni 2008 Nei, du skal ikke trenge å forewarde porter innenfor eget nettverk; det er kun dersom noen prøver å nå deg fra et annet nettverk (for eksempel internett) Du må bare passe på at programmets port er åpen på maskinen din, og at ingen andre programmer bruker den samme porten. Lenke til kommentar
Velena Skrevet 26. juni 2008 Forfatter Del Skrevet 26. juni 2008 GeirGrusom: Det er jo akkurat det jeg prøver på o.0( prøver å kommunisere via internett). Lenke til kommentar
GeirGrusom Skrevet 26. juni 2008 Del Skrevet 26. juni 2008 I see... ja da må du forewarde porten til datamaskinen din. (altså til den maskinen som er serveren) Lenke til kommentar
Velena Skrevet 26. juni 2008 Forfatter Del Skrevet 26. juni 2008 (endret) Er det mulig for meg å forwarde en port til en router som jeg ikke har eierskap til? (Bruker naboens nettverk). Dette burde vel ikke skape problemer for naboen så lenge jeg velger en usannsynlig port? Endret 26. juni 2008 av Velena Lenke til kommentar
HDSoftware Skrevet 27. juni 2008 Del Skrevet 27. juni 2008 Det du trenger er tillgang til admin på den routeren. Dermed kan du forwarde hva du vil. Ta en port langt oppe så går det nok bra. Hvis nabon din har en FTP server så må du sørge for at du ikke tar en port i Passive range'en hans. Ole Lenke til kommentar
Velena Skrevet 2. juli 2008 Forfatter Del Skrevet 2. juli 2008 Har tenkt over dette litt, og det virker upraktisk å måtte forwarde en port for hvert nettverk dette programmet skal kobles til. MSN fungerer jo uten at du må forwarde noe som helst på forhånd, hvordan har de som programmerte det programmet løst det? Lenke til kommentar
GeirGrusom Skrevet 2. juli 2008 Del Skrevet 2. juli 2008 Fordi du kobler til en sentralisert server som sender meldinger videre. Lenke til kommentar
Velena Skrevet 2. juli 2008 Forfatter Del Skrevet 2. juli 2008 Ville det gått tregere enn å Sende meldingen dirkete til mottakeren? Hva er forresten en sentralisert server? Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå