udp Programm lässt sich nicht linken

Gast #1485518
Lesenswert?

Guten Morgen,

ich hab mir unter Microsoft Visual Studio C++ 2008 ein UDP Client 
Programm geschrieben. Sobald ich das Programm ausführen möchte, 
erscheinen meherer Linker Fehler:
1
1>udp.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__WSAGetLastError@0" in Funktion "_wmain".
2
1>udp.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__socket@12" in Funktion "_wmain".
3
1>udp.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__WSAStartup@8" in Funktion ""int __cdecl startWinsock(void)" (?startWinsock@@YAHXZ)".
4
1>C:\UDP\udp\Debug\udp.exe : fatal error LNK1120: 3 nicht aufgelöste externe Verweise.
Angehängte Dateien:
Persönliche Seite #1485559
Lesenswert?

Wichtigstes Zitat daraus:

   Ensure that the build environment links to the Winsock
   Library file WS2_32.lib. Applications that use Winsock
   must be linked with the WS2_32.lib library file.

Also muss diese Library in den Projekteinstellungen als zusätzlich zu 
verwendende Library aufgeführt werden.

Alternativ kann man bei Microsoft-Compilern auch sowas machen:

  #pragma comment(lib, "ws2_32.lib")

(in einem Sourcefile des Projekts unterbringen)
Gast #1485663
Lesenswert?

> Ich kann nur die Empfangsadresse einstellen.

Wenn du kein bind() machst, vergibt er lokale Adresse und Port 
automatisch. Aber das ist dafür egal. Das Routing kümmert sich anhand 
der Zieladresse schon automatisch darum, das da rauszuschicken, wo es 
hingehört.
Gast #1485760
Lesenswert?

Das ist mein Code für das Empfangen.
1
void udp_echo_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, struct ip_addr *addr, u16_t port)
2
{
3
  if (p != NULL) 
4
  {
5
    udp_sendto(pcb, p, addr, port)/
6
    
7
    pbuf_free(p);
8
  }
9
}
10

11

12
void recvUDP(void)
13
{
14
    struct ip_addr ipaddr;
15
    struct udp_pcb *pcb;
16
    struct pbuf *pb;
17
    IP4_ADDR(&ipaddr, 192,167,1,9); // Zielrechner
18

19
    pcb = udp_new();
20
    udp_bind(pcb, IP_ADDR_ANY, 5555);
21

22
    udp_connect(pcb, &ipaddr, 5555);
23
    udp_recv(pcb, udp_echo_recv, NULL);
24
}
Gast #1485832
Lesenswert?

Auf der PC Seite habe ich mal mit C++ eine Beispielapplikation erstellt.
Mit dieser sende ich alle paar Millisekunden ein UDP-Packet. Mein PC 
besitzt zwei Netzwerkkarten. Das Empfangsmodul ist ein Mikrocontroller 
mit einer Ethernet Schnittstelle. Jetzt weiss halt nicht genau wo man 
auf der PC-Seite auswählen kann auf welche Netzwerkkarte die Nachrichten 
versendet werden sollen.
Gast #1486438
Lesenswert?

> Jetzt weiss halt nicht genau wo man auf der PC-Seite auswählen kann auf
> welche Netzwerkkarte die Nachrichten versendet werden sollen.

Das wählst du über die der Karte über das Betriebssystem zugewiesene 
IP-Adresse und Netzmaske aus.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren