18. april 2006 - 17:16
Der er
22 kommentarer og 1 løsning
Ang msdn's client sample (winsock2)
jeg har et problem med denne code sample fra msdn.. den vil kun connecte til "127.0.0.1" (localhost), og det kan jeg ikke bruge til noget.. prøv fx at ændre den port og addr til noget andet så gider den ikke... altså det er ved connect() WSAGetLastError returnerer med 10049 hvordan kan jeg løse det? ------ #include <stdio.h> #include "winsock2.h" void main() { // Initialize Winsock. WSADATA wsaData; int iResult = WSAStartup( MAKEWORD(2,2), &wsaData ); if ( iResult != NO_ERROR ) printf("Error at WSAStartup()\n"); // Create a socket. SOCKET m_socket; m_socket = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP ); if ( m_socket == INVALID_SOCKET ) { printf( "Error at socket(): %ld\n", WSAGetLastError() ); WSACleanup(); return; } // Connect to a server. sockaddr_in clientService; clientService.sin_family = AF_INET; clientService.sin_addr.s_addr = inet_addr( "127.0.0.1" ); clientService.sin_port = htons( 27015 ); if ( connect( m_socket, (SOCKADDR*) &clientService, sizeof(clientService) ) == SOCKET_ERROR) { printf( "Failed to connect.\n" ); WSACleanup(); return; } // Send and receive data. int bytesSent; int bytesRecv = SOCKET_ERROR; char sendbuf[32] = "Client: Sending data."; char recvbuf[32] = ""; bytesSent = send( m_socket, sendbuf, strlen(sendbuf), 0 ); printf( "Bytes Sent: %ld\n", bytesSent ); if ( bytesRecv == 0 || (bytesRecv == SOCKET_ERROR && WSAGetLastError()== WSAECONNRESET )) { bytesRecv = recv( m_socket, recvbuf, 32, 0 ); if ( bytesRecv == -1 ) { printf( "Connection Closed.\n"); break; } if (bytesRecv < 0) return; printf( "Bytes Recv: %ld\n", bytesRecv ); } WSACleanup(); return; }
Annonceindlæg fra Cognizant
18. april 2006 - 17:37
#1
er det en host som eksisterer du connecter til og lytter den paa porten ?
18. april 2006 - 17:45
#2
jep det gør den.. jeg kan ikke se hvad der er galt??
18. april 2006 - 18:11
#3
WSAEADDRNOTAVAIL 10049: Cannot assign requested address. The requested address is not valid in its context. This normally results from an attempt to bind to an address that is not valid for the local computer. This can also result from connect, sendto, WSAConnect, WSAJoinLeaf, or WSASendTo when the remote address or port is not valid for a remote computer (for example, address or port 0).
18. april 2006 - 18:16
#4
#include <stdio.h> #pragma comment( lib, "ws2_32") #include "winsock2.h" void main() { // Initialize Winsock. WSADATA wsaData; int iResult = WSAStartup( MAKEWORD(2,2), &wsaData ); if ( iResult != NO_ERROR ) printf("Error at WSAStartup()\n"); // Create a socket. SOCKET m_socket; m_socket = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP ); if ( m_socket == INVALID_SOCKET ) { printf( "Error at socket(): %ld\n", WSAGetLastError() ); WSACleanup(); return; } // Connect to a server. sockaddr_in clientService; clientService.sin_family = AF_INET; clientService.sin_addr.s_addr = inet_addr( "86.52.122.241" ); clientService.sin_port = htons( 9000 ); if ( connect( m_socket, (SOCKADDR*) &clientService, sizeof(clientService) ) == SOCKET_ERROR) { printf( "Failed to connect.\n" ); WSACleanup(); return; } // Send and receive data. int bytesSent; int bytesRecv = SOCKET_ERROR; char sendbuf[32] = "Client: Sending data."; char recvbuf[32] = ""; bytesSent = send( m_socket, sendbuf, strlen(sendbuf), 0 ); printf( "Bytes Sent: %ld\n", bytesSent ); if ( bytesRecv == 0 || (bytesRecv == SOCKET_ERROR && WSAGetLastError()== WSAECONNRESET )) { bytesRecv = recv( m_socket, recvbuf, 32, 0 ); if ( bytesRecv == -1 ) { printf( "Connection Closed.\n"); return; } if (bytesRecv < 0) return; printf( "Bytes Recv: %ld\n", bytesRecv ); } WSACleanup(); return; }
18. april 2006 - 18:16
#5
Det fungere fint her! Har dog lige rettet en lille "fejl" men den skulle ikke have betydning for om du kan lave en forbindelse eller ej
18. april 2006 - 18:29
#6
her er den jeg har lavet
http://nse2005se.1go.dk/nsClient.zip virker den hos dig?
ps. det eksemplar du gav der den lukker ned lige efter den har printet "Bytes recv....
18. april 2006 - 18:32
#7
nå ser ikke ud til jeg kan uploade noget :)
18. april 2006 - 18:33
#8
og skal det ikke være en while loop : (if ( bytesRecv == 0 || (bytesRecv == SOCKET_ERROR && WSAGetLastError()== WSAECONNRESET )) sådan at den hele tiden modtager data..
18. april 2006 - 18:41
#9
den lukker efter printf("Bytes sent"... mente jeg.. og den modtager ingen data?
18. april 2006 - 18:46
#10
Hvad er det du skal bruge?
18. april 2006 - 18:56
#11
Nej det skal ikke være i en while løkke. Det er ikke sådan du får den til at modtage data hele tiden
18. april 2006 - 19:00
#12
jeg skal bare lave en klient som connecter til en addr og som printer når den modtager data..
18. april 2006 - 19:29
#13
Ja men den skal jo også modtage noget data ikke? Hvad for data skal den modtag en fil eller hvad?
18. april 2006 - 19:34
#14
Hvor nu læste jeg lige efter... Og det at den lukker ned er jo også helt korrekt. Lige nu er programmet så ledes at det connceter til serveren og sender "Client: Sending data." og modtager så noget data fra serveren og lukker ned!
19. april 2006 - 12:02
#15
jamen den skal gerne holde sig connected hele tiden og hver gang den modtager data skal den lave en printf("%s\n", data) hvis du forstår.. den modtager bare tekst.
19. april 2006 - 15:33
#16
Dette er det der modtager og sender: // Send and receive data. int bytesSent; int bytesRecv = SOCKET_ERROR; char sendbuf[32] = "Client: Sending data."; char recvbuf[32] = ""; bytesSent = send( m_socket, sendbuf, strlen(sendbuf), 0 ); printf( "Bytes Sent: %ld\n", bytesSent ); if ( bytesRecv == 0 || (bytesRecv == SOCKET_ERROR && WSAGetLastError()== WSAECONNRESET )) { bytesRecv = recv( m_socket, recvbuf, 32, 0 ); if ( bytesRecv == -1 ) { printf( "Connection Closed.\n"); return; } if (bytesRecv < 0) return; printf( "Bytes Recv: %ld\n", bytesRecv ); } Det skal du så bare smide i en løkke. Altså modtage delen ( recv() )!! Har du fået den til at connect?
20. april 2006 - 21:30
#17
hmm okay men nej den gider ikke connecte.. addr: 81.7.185.36 port: 202 prøv du
20. april 2006 - 21:30
#18
man kan sagtens connecte til den addr og port via telnet.. men gennem mit program får jeg stadig error code 10049
21. april 2006 - 16:36
#19
Har du en firewall på?
23. april 2006 - 00:40
#20
jep men det gør ingen forskel at slå den fra.. det har jeg prøvet :(
23. april 2006 - 00:41
#21
det er også lige meget fandt en socket class så im happy
23. april 2006 - 08:49
#22
Oki lyder bare mærkeligt at du ikke kan connecte med det som er herinde! Men hvis du har fundet noget der virker er det jo all good!
Kurser inden for grundlæggende programmering