C++中的IPv6网络程序设计
作者 佚名技术
来源 程序设计
浏览
发布时间 2012-06-29
p(); ????return -1; ??} ??// ?ììy ??if (listen(ServSock, 5) == SOCKET_ERROR) ??{ ????fprintf(stderr, "listen() failed with error %d: %s\n", ??????WSAGetLastError(), DecodeError(WSAGetLastError())); ????WSACleanup(); ????return -1; ??} ??printf("''Listening'' on port %s, protocol??%s, protocol??family %s\n", ????Port, \"TCP\", ????"PF_INET6"); ??freeaddrinfo(AddrInfo); ??//ê1ó?select I/O ?£Dí??DDê?·¢ ??FD_ZERO(&SockSet); ??while(1) ??{ ????FromLen = sizeof(From); ????if (FD_ISSET(ServSock, &SockSet)) break; ????FD_SET(ServSock, &SockSet); ????if (select(0, &SockSet, 0, 0, 0) == SOCKET_ERROR) ????{ ??????fprintf(stderr, "select() failed with error %d: %s\n", ????????WSAGetLastError(), DecodeError(WSAGetLastError())); ??????WSACleanup(); ??????return -1; ????} ??} ??if (FD_ISSET(ServSock, &SockSet)) ??{ ????FD_CLR(ServSock, &SockSet); ??} ??//?óêüò???á??ó ??SOCKET ConnSock; ??ConnSock = accept(ServSock, (LPSOCKADDR)&From, &FromLen); ??if (ConnSock == INVALID_SOCKET) ??{ ????fprintf(stderr, "accept() failed with error %d: %s\n", ??????WSAGetLastError(), DecodeError(WSAGetLastError())); ??????WSACleanup(); ??????return -1; ??} ??if (getnameinfo((LPSOCKADDR)&From, FromLen, Hostname, ????sizeof(Hostname), NULl??, 0, NI_NUMERICHOST) != 0) ????strcpy(Hostname, "<unknown>"); ????printf("\nAccepted connection from %s\n", Hostname); ????while(1) ????{ ??????//μè′y?óêüêy?Y ??????AmountRead = recv(ConnSock, Buffer, sizeof(Buffer), 0); ??????if (AmountRead == SOCKET_ERROR) ??????{ ????????fprintf(stderr, "recv() failed with error %d: %s\n", WSAGetLastError(), DecodeError(WSAGetLastError())); ??????????closesocket(ConnSock); ????????break; ??????} ??????if (AmountRead == 0) { ????????printf("Client closed connection\n"); ??????????closesocket(ConnSock); ????????break; ??????} ??????printf("Received %d bytes from client: [%.*s]\n", ????????AmountRead, AmountRead, Buffer); ??????//??DD?òμ¥ECHO ??ó| ??????printf("Echoing same data back to client\n"); ????????RetVal??= send(ConnSock, Buffer, AmountRead, 0); ??????if (RetVal??== SOCKET_ERROR) ??????{ ????????fprintf(stderr, "send() failed: error %d: %s\n", ??????????WSAGetLastError(), DecodeError(WSAGetLastError())); ????????closesocket(ConnSock); ????????break; ??????} ????} ????return 0; } void CIPv6::Usage(char *ProgName) { ??fprintf(stderr, "\nSimple socket sample server program.\n"); ????fprintf(stderr, "transport tEither TCP or UDP. (default: %s)\n", ????"TCP"); ????fprintf(stderr, "port\t\tPort on which to bind. (default %s)\n", ????DEFAULT_PORT); ??fprintf(stderr, "address\tIP address on which to bind.(default: unspecified address)\n"); ????WSACleanup(); ??exit(1); } LPSTR CIPv6::DecodeError(int ErrorCode) { ??static char Message[1024]; ??FormatMessage(FORMAT_ME |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
上一篇: 用托管C++编写自定义Web组合控件下一篇: C++中强制转换函数总结
关于C++中的IPv6网络程序设计的所有评论