ערכתי לאחרונה בתאריך 17.11.10 בשעה 23:04 בברכה, עידן_הכלי
אהלן חבר'ה,אני מנסה לממש Client/Server שמקבל בקשה בUDP אבל משום מה זה לא מצליח.
אני גם לא מצליח להסניף את התעבורה של האפליקציה שלי כדי להבין אם מדובר בבעיה ב Client או ב Server.
בכל מקרה, המצב הוא שהקליינט מודיע על כך שהוא שלח את המידע בהצלחה והסרבר נשאר תקוע כאילו לא קיבל אף מידע.
הנה הקוד (לקחתי מתוך MSDN):
****Server****
#include <winsock2.h> #include <ws2tcpip.h> #include <stdio.h> #include <windows.h> #pragma comment(lib, "Ws2_32.lib")void main() { WSADATA wsaData; SOCKET RecvSocket; sockaddr_in RecvAddr; int Port = 27015; char RecvBuf; int BufLen = 1024; sockaddr_in SenderAddr; int SenderAddrSize = sizeof(SenderAddr); //----------------------------------------------- // Initialize Winsock WSAStartup(MAKEWORD(2,2), &wsaData); //----------------------------------------------- // Create a receiver socket to receive datagrams RecvSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); //----------------------------------------------- // Bind the socket to any address and the specified port. RecvAddr.sin_family = AF_INET; RecvAddr.sin_port = htons(Port); RecvAddr.sin_addr.s_addr = htonl(INADDR_ANY); bind(RecvSocket, (SOCKADDR *) &RecvAddr, sizeof(RecvAddr)); //----------------------------------------------- // Call the recvfrom function to receive datagrams // on the bound socket. printf("Receiving datagrams...\n"); recvfrom(RecvSocket, RecvBuf, BufLen, 0, (SOCKADDR *)&SenderAddr, &SenderAddrSize); //----------------------------------------------- // Close the socket when finished receiving datagrams printf("Finished receiving. Closing socket.\n"); closesocket(RecvSocket); //----------------------------------------------- // Clean up and exit. printf("Exiting.\n"); WSACleanup(); return; }
|
****Client****
#include <winsock2.h> #include <ws2tcpip.h> #include <stdio.h> #include <windows.h>#pragma comment(lib, "Ws2_32.lib") void main() { WSADATA wsaData; SOCKET SendSocket; sockaddr_in RecvAddr; int Port = 27015; char* SendBuf = "Hello"; int BufLen = strlen(SendBuf); //--------------------------------------------- // Initialize Winsock WSAStartup(MAKEWORD(2,2), &wsaData); //--------------------------------------------- // Create a socket for sending data SendSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); //--------------------------------------------- // Set up the RecvAddr structure with the IP address of // the receiver and the specified port number. RecvAddr.sin_family = AF_INET; RecvAddr.sin_port = htons(Port); RecvAddr.sin_addr.s_addr = inet_addr("10.0.0.2"); //--------------------------------------------- // Send a datagram to the receiver printf("Sending a datagram to the receiver...\n"); int sent = sendto(SendSocket, SendBuf, BufLen, 0, (SOCKADDR *) &RecvAddr, sizeof(RecvAddr)); printf("Total %d bytes sent.\n",sent); //--------------------------------------------- // When the application is finished sending, close the socket. printf("Finished sending. Closing socket.\n"); closesocket(SendSocket); //--------------------------------------------- // Clean up and quit. printf("Exiting.\n"); WSACleanup(); return; }
|
אשמח לעזרתכם במציאת הבאג.
תודה,
עידן.