Gå til innhold

Anbefalte innlegg

Har et stort problem med å koble til to ulike program. Søkte selvsagt opp feilmeldingen jeg fikk, men MSDN var ikke spesiellt spesifike, så jeg spør derfor her.

Koden til serveren(Denne utføres en gang etter at programmet starter):

listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
			listener.Bind(new IPEndPoint(myIP, Convert.ToInt32(PortTextBox.Text)));
			listener.Listen(10);
			listener.BeginAccept(new AsyncCallback(OnConnectRequest), listener);

Koden til klienten (Denne koden utføres når koden over har blitt utført) :

IPAddress address = IPAddress.Parse(IPTextBox.Text);
			int port = Convert.ToInt32(PortTextBox.Text);
			IPEndPoint ipEnd = new IPEndPoint(address, port);
			connectorSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
			connectorSocket.Connect(ipEnd);

Resultatet:

SocketException: Et tilkoblingsforsøk mislyktes fordi den tilkoblede parten ikke svarte på riktig måte etter en tidsperiode, eller tilkoblingen mislyktes fordi den tilkoblede verten ikke svarte.

Serveren og Klienten ble forøvrig kjørt på to ulike datamaskiner, som begge hadde windowsbrannmuren deaktivert.

Endret av Velena
Lenke til kommentar
Videoannonse
Annonse

Jeg har forsåvidt støtt på dette problemet selv.

 

Nå er det en stund siden jeg drev med socket programmering, men hvorfor bruker du ikke TCP listener istedenfor å lage en selv med Socket?

Du burde også bruke IPEndPoint sin AddressFamily i constructoren, dette forsikrer deg om at addressfamily alltid er riktig i forhold til addressen du bruker.

 

Men jeg er temmelig usikker på hva som var det faktiske problemer, pass blant annet på at du ikke bruker en port som er i bruk av et annet program, da kan du også få denne feilmeldingen.

 

Jeg kan ikke se at noe er galt med koden din, men du viser heller ikke Accept funksjonen din.

Lenke til kommentar

GeirGrusom: Jeg regner med at den IP addressen som ligger under DhcpIPAddress i registeret alltid er IPv4. Når det gjelder porten jeg brukte, ser jeg ikke for meg at jeg kjørte noen programmer som brukte 9265 akkurat da. Her er acceptfunksjonen:

 public void OnConnectRequest(IAsyncResult ar)
	{
		Socket RecvSock = (Socket)ar.AsyncState;
		RecvSock = RecvSock.EndAccept(ar);
		AsyncCallback recieveData = new AsyncCallback(OnRecievedData);
		RecvSock.BeginReceive(m_byBuff, 0, m_byBuff.Length, SocketFlags.None, recieveData, RecvSock);
	}

Lenke til kommentar

en fin ting å teste, ville vært å kjøre begge kodesnuttene på samme maskin, for å utelukke eventuelle nettverksproblemer.

 

- "Call the Bind method prior to calling the Listen method if you want to specify the local IP address and port number." fra MSDN om System.Net.Sockets

 

- forsøk å bruke TcpListener for å ta imot connections istedenfor å bruke Socket? utdrag fra MSDN: "If you are writing a relatively simple application and do not require maximum performance, consider using TcpClient, TcpListener, and UdpClient. These classes provide a simpler and more user-friendly interface to Socket communications."

Lenke til kommentar

portforwarding vil kun være nødvendig om man er på to forskjellige nett, eller hvis man forsøker å koble til via den eksterne ip-adressen.

 

såvidt jeg forstår er disse to maskinene på samme lokalnett, men det kan jo være feil selvfølgelig.

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å
×
×
  • Opprett ny...