Avatar billede narrr Nybegynder
21. maj 2003 - 20:05 Der er 15 kommentarer og
1 løsning

Winsock send/recv

Hey. Er der umuligt at bruge send() mens recv() står og venter på data? Jeg bruger multithreading, så derfor kan jeg godt udføre andre handlinger mens recv() venter, men jeg kan bare ikke få send til at virke. Bortset fra når recv ikke kører..

Visual C++ 6.0
Avatar billede soreno Praktikant
21. maj 2003 - 20:57 #1
Et skud i tågen:
Bruger du samme socket til send og recv ?
Avatar billede narrr Nybegynder
21. maj 2003 - 20:58 #2
Jeps.
Avatar billede soreno Praktikant
21. maj 2003 - 21:00 #3
Det er nok ikke så godt..
Det er sansynligvis derfor du ikke kan sende og modtage på samme tid.

Prøv at oprette 2 sockets.
Avatar billede narrr Nybegynder
21. maj 2003 - 21:04 #4
Så skal jeg jo connecte to gange.. Er serveren glad for det?
Avatar billede soreno Praktikant
21. maj 2003 - 21:10 #5
Du skal ikke connecte for at receive.

Principielt er din applikatin både klient og server (send er klient og recv er server).
Avatar billede narrr Nybegynder
21. maj 2003 - 21:33 #6
Okay. Jeg opretter min sock2 sådan her:
sock2 = socket(AF_INET, SOCK_DGRAM, 0) ) == -1; (den anden er en stream)
så binder jeg den:

    myAddr.sin_addr.s_addr = INADDR_ANY;
    myAddr.sin_family = AF_INET;
    myAddr.sin_port = htons(6667);

    if((bind(sock2, (sockaddr*)&myAddr, sizeof(sockaddr)))==-1)
        return -1;

og modtager med:

recvfrom(sock2, buffer, 1023, 0, NULL, NULL);

Virker ikke :(
Avatar billede soreno Praktikant
21. maj 2003 - 21:41 #7
Dvs. det er bind det er galt med eller hvad ?
Avatar billede narrr Nybegynder
21. maj 2003 - 21:42 #8
Bind ser ud til at virke.. Den returnerer jo ikke SOCKET_ERROR
Avatar billede soreno Praktikant
21. maj 2003 - 21:43 #9
Du skal også lytte..
if(listen(sock, 1) != SOCKET_ERROR)
{
  recv(..)
}
Avatar billede soreno Praktikant
21. maj 2003 - 21:48 #10
Det kan godt ske du skal justere på sidste parameter (1).

int PASCAL FAR listen(SOCKET s, int backlog );
s - A descriptor identifying a bound, unconnected socket.
backlog    - The maximum length to which the queue of pending connections may grow.
Avatar billede narrr Nybegynder
21. maj 2003 - 22:02 #11
OKay, listen kan man ikke bruge på en SOCK_DGRAM
Avatar billede narrr Nybegynder
21. maj 2003 - 22:03 #12
Serveren connecter jo ikke til mig. Jeg sender noget data, og den svarer så mig. Det er ikke P2P jeg laver.
Avatar billede soreno Praktikant
21. maj 2003 - 22:12 #13
Aha. Jeg har misforstået dit spørgsmål.

Prøv at kigge på "Asynchronous client" her (nederst):
http://tangentsoft.net/wskfaq/examples/basics/

Det er dog ikke noget jeg har erfaring med (jeg vil gerne kigge på det hvis andre ikke hjælper dig, men jeg skal i send så det bliver først i morgen).
Avatar billede narrr Nybegynder
21. maj 2003 - 23:14 #14
Prøver lige med en ny beskrivelse hvis den første var lidt dårlig:

Min main ligner noget ala:
//init kode
_beginthread(thread, 0, 0);
receiveMessage();

De to funktioner er så:
thread():
while(1)
cin>>str;
send(sock, str, strlen(str), 0);

og receive står bare og modtager i en while(1).

Problemet er så, at mens recv venter på en besked, kan jeg ikke bruge send.
Avatar billede soreno Praktikant
22. maj 2003 - 08:26 #15
Avatar billede narrr Nybegynder
25. maj 2003 - 00:11 #16
jeg dropper det
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