Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //http://www.binarytides.com/udp-socket-programming-in-winsock/
- //server.cpp
- /*
- Simple UDP Server
- Silver Moon ( m00n.silv3r@gmail.com )
- */
- #include<stdio.h>
- #include<winsock2.h>
- #pragma comment(lib,"ws2_32.lib") //Winsock Library
- #define BUFLEN 512 //Max length of buffer
- #define PORT 8888 //The port on which to listen for incoming data
- int main()
- {
- SOCKET s;
- struct sockaddr_in server, si_other;
- int slen , recv_len;
- char buf[BUFLEN];
- WSADATA wsa;
- slen = sizeof(si_other) ;
- //Initialise winsock
- printf("\nInitialising Winsock...");
- if (WSAStartup(MAKEWORD(2,2),&wsa) != 0)
- {
- printf("Failed. Error Code : %d",WSAGetLastError());
- exit(EXIT_FAILURE);
- }
- printf("Initialised.\n");
- //Create a socket
- if((s = socket(AF_INET , SOCK_DGRAM , 0 )) == INVALID_SOCKET)
- {
- printf("Could not create socket : %d" , WSAGetLastError());
- exit(EXIT_FAILURE);
- }
- printf("Socket created.\n");
- //Prepare the sockaddr_in structure
- server.sin_family = AF_INET;
- server.sin_addr.s_addr = INADDR_ANY;
- server.sin_port = htons( PORT );
- //Bind
- if( bind(s ,(struct sockaddr *)&server , sizeof(server)) == SOCKET_ERROR)
- {
- printf("Bind failed with error code : %d" , WSAGetLastError());
- exit(EXIT_FAILURE);
- }
- puts("Bind done");
- //keep listening for data
- while(1)
- {
- printf("Waiting for data...");
- fflush(stdout);
- //clear the buffer by filling null, it might have previously received data
- memset(buf,'\0', BUFLEN);
- //try to receive some data, this is a blocking call
- if ((recv_len = recvfrom(s, buf, BUFLEN, 0, (struct sockaddr *) &si_other, &slen)) == SOCKET_ERROR)
- {
- printf("recvfrom() failed with error code : %d" , WSAGetLastError());
- exit(EXIT_FAILURE);
- }
- //print details of the client/peer and the data received
- printf("Received packet from %s:%d\n", inet_ntoa(si_other.sin_addr), ntohs(si_other.sin_port));
- printf("Data: %s\n" , buf);
- //now reply the client with the same data
- if (sendto(s, buf, recv_len, 0, (struct sockaddr*) &si_other, slen) == SOCKET_ERROR)
- {
- printf("sendto() failed with error code : %d" , WSAGetLastError());
- exit(EXIT_FAILURE);
- }
- }
- closesocket(s);
- WSACleanup();
- return 0;
- }
- //client.cpp
- /*
- Simple udp client
- Silver Moon (m00n.silv3r@gmail.com)
- */
- #include<stdio.h>
- #include<winsock2.h>
- #pragma comment(lib,"ws2_32.lib") //Winsock Library
- #define SERVER "127.0.0.1" //ip address of udp server
- #define BUFLEN 512 //Max length of buffer
- #define PORT 8888 //The port on which to listen for incoming data
- int main(void)
- {
- struct sockaddr_in si_other;
- int s, slen=sizeof(si_other);
- char buf[BUFLEN];
- char message[BUFLEN];
- WSADATA wsa;
- //Initialise winsock
- printf("\nInitialising Winsock...");
- if (WSAStartup(MAKEWORD(2,2),&wsa) != 0)
- {
- printf("Failed. Error Code : %d",WSAGetLastError());
- exit(EXIT_FAILURE);
- }
- printf("Initialised.\n");
- //create socket
- if ( (s=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == SOCKET_ERROR)
- {
- printf("socket() failed with error code : %d" , WSAGetLastError());
- exit(EXIT_FAILURE);
- }
- //setup address structure
- memset((char *) &si_other, 0, sizeof(si_other));
- si_other.sin_family = AF_INET;
- si_other.sin_port = htons(PORT);
- si_other.sin_addr.S_un.S_addr = inet_addr(SERVER);
- //start communication
- while(1)
- {
- printf("Enter message : ");
- gets(message);
- //send the message
- if (sendto(s, message, strlen(message) , 0 , (struct sockaddr *) &si_other, slen) == SOCKET_ERROR)
- {
- printf("sendto() failed with error code : %d" , WSAGetLastError());
- exit(EXIT_FAILURE);
- }
- //receive a reply and print it
- //clear the buffer by filling null, it might have previously received data
- memset(buf,'\0', BUFLEN);
- //try to receive some data, this is a blocking call
- if (recvfrom(s, buf, BUFLEN, 0, (struct sockaddr *) &si_other, &slen) == SOCKET_ERROR)
- {
- printf("recvfrom() failed with error code : %d" , WSAGetLastError());
- exit(EXIT_FAILURE);
- }
- puts(buf);
- }
- closesocket(s);
- WSACleanup();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement