Gå til innhold

Anbefalte innlegg

Holder på med et prosjekt på skolen og sliter med noen småting...

 

For det første: .Net 2.0 på denne PDA'en me skal bruke, og da mangler me Backgroundworker... Finnes det noen måte å få Backgroundworker inn på PDA'en uansett??

 

For det andre: Skal sende fra en server til denne PDA'en... Har laget en enkel GUI for å teste, altså ikke på PDA'en, men på vanlig GUI, og bruker 27.0.0.1 som ip....

 

Her er forresten koden til mottakeren:

 

 

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.Net;

using System.Net.Sockets;

using System.Threading;

 

namespace PDA_klienten_vanligGUI

{

public partial class Form1 : Form

{

public bool kobletTil = false;

 

public Socket klientSokkel = new Socket(AddressFamily.InterNetwork,

SocketType.Stream, ProtocolType.Tcp);

public IPEndPoint serverEP;

 

string[] stringData = new string[20];

bool[] plassopptatt = new bool[20];

 

 

public Form1()

{

InitializeComponent();

}

 

private void btn_kobleTil_Click(object sender, EventArgs e)

{

kobletTil = true;

 

 

serverEP = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9050);

try

{

klientSokkel.Connect(serverEP);

}

 

 

catch (SocketException E)

{

textBox1.Text = (

"Fikk ikke forbindelse med server." + E.Message.ToString());

return;

}

 

backgroundWorker1.RunWorkerAsync();

 

 

 

 

 

}

 

private void btn_koblefra_Click(object sender, EventArgs e)

{

if (kobletTil == true)

{

textBox1.Text = "Forbindelsen med serveren er brutt...";

klientSokkel.Shutdown(SocketShutdown.Both);

klientSokkel.Close();

kobletTil = false;

}

 

}

 

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)

{

byte[] data = new byte[1024];

 

 

 

int nMottatt = klientSokkel.Receive(data);

//while (true)

//{

for (int i = 0; i < 19; i++)

{

plassopptatt = false;

}

 

 

for (int i = 0; i < 19; i++)

{

 

data = new byte[1024];

nMottatt = klientSokkel.Receive(data);

stringData = Encoding.ASCII.GetString(data, 0, nMottatt);

if (stringData == "ferdig")

{

break;

}

else

{

plassopptatt = true;

}

//Thread.Sleep(200);

 

}

//Console.Clear();

 

 

 

 

 

 

//}

}

 

private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)

{

if (kobletTil == true)

{

for (int i = 0; i < 19; i++)

{

if (plassopptatt == true)

{

textBox1.Text = stringData + Environment.NewLine;

}

 

}

backgroundWorker1.RunWorkerAsync();

}

}

 

 

 

 

}

}

 

 

 

 

Kjører altså backgroundworker til å motta data fra "serveren" og skrive til tekstboksen

 

Problemet er at det er flere linjer som skal inn. Og den skriver bare over hele tiden. Hvordan fikse inn skikkelig linjeskift? Slik at har eg sendt tre stringer før ferdig kommer så skriver den ut tre linjer og så begynner på toppen igjen....

 

For det andre så har eg problemer med at hvis eg sender kun 1 string så vil den ikke oppdatere seg, det gjør den greit hvis eg sender to eller flere. Men da skriver den ut kun den siste stringen som er mottatt... (sikkert fordi den skriver over den første....)

 

Noen gode tips?

Lenke til kommentar

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å
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...