Avatar billede mathiash Nybegynder
07. september 2005 - 15:49 Der er 11 kommentarer og
1 løsning

UDP socket eksempel med winsock

Hej!

Jeg ønsker et UDP socket eksempel til winsock som forbinder ti
en server, sender en besked og udskriver svaret.

Mvh. Mathias Hansen
Avatar billede arne_v Ekspert
07. september 2005 - 16:08 #1
Avatar billede mathiash Nybegynder
07. september 2005 - 16:10 #2
Yep. Har kigget på den, men det er til linux så vidt jeg kan se, glemte lige at nævne
at jeg skal bruge det til win32 :)
Avatar billede arne_v Ekspert
07. september 2005 - 16:11 #3
som jeg læser koden er den til begge:

  //Frigiv vores socket
#if defined(__linux__)
  close(sock);
#elif defined(_WIN32)
  closesocket(sock);
#endif
Avatar billede mathiash Nybegynder
07. september 2005 - 16:13 #4
Okay...
Men det må da kunne gøres med mindre kode.. Skal også kun bruge klient.
Avatar billede mathiash Nybegynder
07. september 2005 - 16:15 #5
jeg er simpelthen for doven til at sidde og slå koden i stykker :)
Avatar billede arne_v Ekspert
07. september 2005 - 16:21 #6
så stor er runclient da heller ikke (specielt ikke hvis den bruger C++ klassen)
Avatar billede mathiash Nybegynder
07. september 2005 - 17:15 #7
float serverAddr = 81.7.135.134;
cannot convert `serverAddr' from type `float' to type `sockaddr*'

Hvordan skal jeg gemme min ip så den forstår det?
Kan ikke bruge "IPAdress"

Sig lige til hvis du skal have noget kode.
Avatar billede mathiash Nybegynder
07. september 2005 - 17:38 #8
Okay.

Så er jeg nået så langt her:

#include <stdlib.h>
#include <iostream.h>
#include <windows.h>
#include <winsock.h>
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <memory.h>
#include <tchar.h>
#include <stdio.h>

char *msg;

void runClient()
{


  //Adresse på server
  char serverAddr[] = "81.7.135.134";
  //Servers port
  int port = 27015;
  int i,sock,bytesRead;
  //Buffer til indkommende data
  char buffer[1024];
 
  //Besked som vi sender
  char * message = "\xFF\xFF\xFF\xFFinfo\x00";

  //Opret socket
  sock = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
  if(sock == 0)
  {
    strcpy(msg, "Kunne ikke oprette socket.");
    return;
  }

  //Gør socket klar til at boradcaste
  int value = 1;//1 betyder true
  if(setsockopt(sock,SOL_SOCKET,SO_BROADCAST,(char*)&value,sizeof(int)) != 0)
  {
    //cout << "Kunne ikke sætte socket op til broadcasting." << endl;
  }


  int fromLen = sizeof(sockaddr_in);
  //Send besked
  sendto(sock,message,strlen(message),0,(sockaddr *) serverAddr,fromLen);

  //Vi vil højst vente 5 sekunder på, at serveren svarer
  fd_set set;
  struct timeval timeout;
  int err;

  FD_ZERO(&set);
  FD_SET(sock,&set);
  //Specificér hvor lang tid vi skal vente
  timeout.tv_sec = 5;
  timeout.tv_usec = 0;
  //Vent på data
  err = select(FD_SETSIZE,&set,NULL,NULL,&timeout);
  if(err > 0)
  {
    //Modtag noget igen
    bytesRead = recvfrom(sock,buffer,1024,0,(sockaddr *) &serverAddr,&fromLen);

    sprintf(msg, "Modtog data:\r\n%s\r\n", bytesRead);
  }
  else
  {
    strcpy(msg, "Intet svar...");
  }
  //Frigiv socket
 
  closesocket(sock);
}

/*

extern "C" __declspec(dllexport) int __stdcall get_info(HWND mWnd, HWND aWnd, char *data, char *parms, BOOL show, BOOL nopause)
{

    runClient();
 
  strcpy(data, msg);

  return 3;
}*/

int main() {
   
runClient();

cout << msg;
}

Men programmet crasher desværre :/

Hvorfor?
Avatar billede arne_v Ekspert
07. september 2005 - 20:04 #9
hvor crasher det ?
Avatar billede arne_v Ekspert
29. september 2005 - 20:27 #10
fået det til at virke ?
Avatar billede mathiash Nybegynder
29. september 2005 - 21:01 #11
Har droppet dll'en lige i øjeblikket.

Læg et svar. :)
Avatar billede arne_v Ekspert
29. september 2005 - 21:03 #12
ok
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
Kurser inden for grundlæggende programmering

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