Gå til innhold

Anbefalte innlegg

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 av Velena
Videoannonse
Annonse

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

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 av Velena

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 av Velena

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...