📄 socktest.cpp
字号:
// socktest.cc// test program for sockets// copyright SafeTP Development Group, Inc., 2000 Terms of use are as specified in license.txt#include "sockutil.h" // util#include "socket.h" // sockets api#include "exc.h" // xBase#include <stdlib.h> // atoi#include <stdio.h> // printfvoid testResolve(char const *hostname){ printf("resolving \"%s\": ", hostname); try { printf("%s\n", formatAddress( resolveHostName(hostname)).pcharc()); } catch (xResolveFailure &x) { printf("%s\n", socketErrString("failed to resolve").pcharc()); }}int doit(int argc, char *argv[]){ socket_lib_init(); // test byte ordering { bool big = isBigEndian(); printf("isBigEndian: %d\n", big);# ifdef SAFETP_LITTLE_ENDIAN printf("agrees with SAFETP_LITTLE_ENDIAN: %d\n", !big);# endif# ifdef SAFETP_BIG_ENDIAN printf("agrees with SAFETP_BIG_ENDIAN: %d\n", big);# endif #ifndef __ALPHA__ unsigned long L = htonl(0x12345678); printf("htonl(0x12345678) = 0x%lX\n", L); printf("ntohl(0x%lX) = 0x%lX\n", L, (long)ntohl(L)); unsigned short S = htons(0x1234); printf("htons(0x1234) = 0x%lX\n", (long)S); printf("ntohs(0x%lX) = 0x%lX\n", (long)S, (long)ntohs(S)); printf("'\\x01\\x00' == 0x0100 test "); if ( ('\x01\x00' == 0x0100) == big ) { printf("works\n"); } else { printf("doesn't work\n"); } #endif // !__ALPHA__ } // test name resolution testResolve("localhost"); testResolve("11.22.33.44"); if (argc <= 1) { // server // listen to a port SOCKET listener = listen_socket(PORT_ANY); { sockaddr_in addr; getSockName(listener, addr); printf("server listening on %s\n", (char const*)formatAddress(addr)); } // accept a connection SOCKET socket = accept(listener, NULL, NULL); printSocketInfo(socket); // close listener //close_socket(listener); for(;;) { // use select to wait for action; artificially select on // listener, even though a connection is not expected, just // to test select() with 2 sockets SocketSet sockset; sockset.add(socket); sockset.add(listener); sockset.blockUntilReadable(); // socket action? if (sockset.contains(socket)) { // test for socket closure if (isClosed(socket)) { break; } // read a character char c = recvChar(socket); // echo it printf("%c", c); } // must be listen action else if (sockset.contains(listener)) { printf("action on listen socket...?\n"); } else { printf("select() returned with no sockets..?\n"); } } } else { // client // connect to server SOCKET socket = connect_socket(INADDR_LOOPBACK, atoi(argv[1])); // send some stuff sendAllString(socket, "This is the string I am sending.\n"); // close close_socket(socket); } return 0;}int main(int argc, char *argv[]){ try { return doit(argc, argv); } catch (xBase &x) { return printf("exception caught: %s\n", x.why()); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -