Windows socket programming: Select usage example

Source: Internet
Author: User
Tags htons

Http://blog.csdn.net/zjsiva/article/details/5895087

Written by the producer, reference ///////////////////////////////////// /// // server: # include <stdio. h> # include <string. h ># include <winsock2.h> # pragma comment (Lib, "ws2_32.lib") # define int_server_port 6002 # define str_server_ip "127.0.0.1" # define int_databuffer_size 100 void main (void) {word dwversion = makeword (2, 2); wsadata; wsastartup (winsock_version, & wsadata); socket sockserver = socket (af_ine T, sock_stream, 0); If (invalid_socket = sockserver) {printf ("failed to create socket! /R/N "); wsacleanup (); return;} sockaddr_in addrserver; memset (& addrserver, 0, sizeof (sockaddr_in); addrserver. sin_family = af_inet; addrserver. sin_port = htons (int_server_port); addrserver. sin_addr.s_un.s_addr = htonl (inaddr_any); // addrserver. sin_addr.s_addr = htonl (inaddr_any); int iresult; bool breuseaddr = true; iresult = setsockopt (sockserver, sol_socket, so_reuseaddr, (char *) & breuseaddr, sizeof Seaddr); If (socket_error = iresult) {printf ("failed to set resueaddr socket! /R/N "); wsacleanup (); return;}/* unsigned long cmd = 1; iresult = ioctlsocket (sockserver, fionbio, & cmd ); */iresult = BIND (sockserver, (sockaddr *) & addrserver, sizeof (addrserver); If (socket_error = iresult) {printf ("failed to bind address! /R/N "); wsacleanup (); return;} If (0! = Listen (sockserver, 5) {printf ("failed to listen client! /R/N "); wsacleanup (); return;} uint I = 0; socket sockaccept; sockaddr_in addraccept; int iacceptlen = sizeof (addraccept); char szdatabuff [limit]; int irecvsize; sockaddr_in addrtemp; int itemplen; fd_set FD; fd_zero (& FD); fd_set (sockserver, & FD);/* timeval TM; TM. TV _sec = 0; TM. TV _usec = 1000; */printf ("start server... /R/N "); While (1) {fd_set fdold = FD; iresult = select (0, & fdold, Null, null,/* & TM */null); If (0 <= iresult) {for (I = 0; I <FD. fd_count; I ++) {If (fd_isset (FD. fd_array [I], & fdold) {// If the socket is a server, it receives the connection if (FD. fd_array [I] = sockserver) {memset (& addraccept, 0, sizeof (addrtemp); sockaccept = accept (sockserver, (sockaddr *) & addraccept, & iacceptlen ); if (invalid_socket! = Sockaccept) {fd_set (sockaccept, & FD); // fd_set (sockaccept, & fdold); printf ("% s: % d has connected server! /R/N ", inet_ntoa (addraccept. sin_addr), ntohs (addraccept. sin_port) ;}} else // non-server, receives data (because FD is a read dataset) {memset (szdatabuff, 0, int_databuffer_size); irecvsize = Recv (FD. fd_array [I], szdatabuff, int_databuffer_size, 0); memset (& addrtemp, 0, sizeof (addrtemp); itemplen = sizeof (addrtemp); getpeername (FD. fd_array [I], (sockaddr *) & addrtemp, & itemplen); If (socket_error = irecvsize) {closesocket (FD. fd_array [I]); f D_clr (FD. fd_array [I], & FD); I --; printf ("failed to Recv data, % s: % d errorcode: % d. /R/N ", inet_ntoa (addrtemp. sin_addr), ntohs (addrtemp. sin_port), wsagetlasterror (); continue;} If (0 = irecvsize) {// disable printf ("% s: % d has closed! /R/N ", inet_ntoa (addrtemp. sin_addr), ntohs (addrtemp. sin_port); closesocket (FD. fd_array [I]); fd_clr (FD. fd_array [I], & FD); I --;} If (0 <irecvsize) {// print the received data printf ("Recv % s: % d data: % S/R/N ", inet_ntoa (addrtemp. sin_addr), ntohs (addrtemp. sin_port), szdatabuff) ;}}}} else if (socket_error = iresult) {// wsacleanup (); // printf ("faild to select sockt in server! /R/N "); sleep (100) ;}} wsacleanup ();} //////////////////////////////////////// /// // client: # include <stdio. h> # include <string. h> # include <winsock2.h> # pragma comment (Lib, "ws2_32.lib ") # define int_server_port 6002 # define str_server_ip "127.0.0.1" # define limit 100 # define str_exit "exit" Void main (void) {wsadata; wsastartup (winsock_version, so wsadata); socket Ckclient = socket (af_inet, sock_stream, 0); If (invalid_socket = sockclient) {printf ("failed to create client! /R/N "); wsacleanup ();} sockaddr_in addrclient; addrclient. sin_addr.s_un.s_addr = inet_addr (str_server_ip); addrclient. sin_family = af_inet; addrclient. sin_port = htons (int_server_port); int iresult; iresult = connect (sockclient, (sockaddr *) & addrclient, sizeof (sockaddr_in); If (socket_error = iresult) {printf ("failed to connect server! /R/N "); wsacleanup (); return;} If (0! = Iresult) {int ierrorcode; ierrorcode = wsagetlasterror (); printf ("failed to connect server, error: % d. /R/N ", ierrorcode); wsacleanup (); return;} Char szdatabuffer [int_databuffer_size]; while (1) {memset (szdatabuffer, 0, int_databuffer_size ); scanf ("% s", szdatabuffer); If (0 = strcmp (szdatabuffer, str_exit) {printf ("the client has stopped! /R/N "); break;} else {if (1> send (sockclient, szdatabuffer, strlen (szdatabuffer), 0) {printf (" failed to send data! /R/N ") ;}} sleep (100);} closesocket (sockclient); wsacleanup ();}

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.