网站排名监控工具,北京公司注销,广州网站定制商家,专业定制衣服本实例使用面向连接协议的客户/服务器模式#xff0c;其流程如图2.3所示#xff1a; 图2.3 面向连接的应用程序流程图 服务器方程序#xff1a; #include #include #define TRUE 1 main( ) { int sock, length; struct sockaddr_in server; struct sockaddr tcpaddr; int ms…本实例使用面向连接协议的客户/服务器模式其流程如图2.3所示 图2.3 面向连接的应用程序流程图 服务器方程序 #include #include #define TRUE 1 main( ) { int sock, length; struct sockaddr_in server; struct sockaddr tcpaddr; int msgsock; char buf[1024]; int rval, len; sock socket(AF_INET, SOCK_STREAM, 0); if (sock 0) { perror(“opening stream socket”); exit(1); } server.sin_family AF_INET; server.sin_port INADDR_ANY; if (bind(sock, (struct sockaddr *)server, sizeof(server)) 0) { perror(“binding stream socket”); exit(1); } length sizeof(server); if (getsockname(sock, (struct sockaddr *)server, length) 0) { perror(“getting socket name”); exit(1); } printf(“socket port #%d/n”, ntohs(server.sin_port)); listen(sock, 5); len sizeof(struct sockaddr); do { msgsock accept(sock, (struct sockaddr *)tcpaddr, (int *)len); if (msgsock -1) perror(“accept”); else do{ memset(buf, 0, sizeof(buf)); if ((rval recv(msgsock, buf, 1024)) 0) perror(“reading stream message”); if (rval 0) printf(“ending connection /n”); else printf(“--;%s/n”, buf); }while (rval ! 0); closesocket(msgsock); } while (TRUE); exit(0); } 客户方程序 #include #include #define DATA “half a league, half a league ...” main(argc, argv) int argc; char *argv[ ]; { int sock; struct sockaddr_in server; struct hostent *hp, *gethostbyname( ); char buf[1024]; sock socket(AF_INET, SOCK_STREAM, 0); if (sock 0) { perror(“opening stream socket”); exit(1); } server.sin_family AF_INET; hp gethostbyname(argv[1]); if (hp 0) { fprintf(stderr, “%s: unknown host /n”, argv[1]); exit(2); } memcpy((char*)server.sin_addr, (char*)hp-;h_addr, hp-;h_length); sever.sin_port htons(atoi(argv[2])); if (connect(sock, (struct sockaddr*)server, sizeof(server)) 0) { perror(“connecting stream socket”); exit(3); } if (send(sock, DATA, sizeof(DATA)) 0) perror(“sending on stream socket”); closesocket(sock); exit(0); } 2.5 一个通用的实例程序 在上一节中我们介绍了一个简单的socket程序实例。从这个例子我们可以看出使用socket编程几乎有一个模式即所有的程序几乎毫无例外地按相同的顺序调用相同的函数。因此我们可以设想设计一个中间层它向上提供几个简单的函数程序只要调用这几个函数就可以实现普通情考网考网下的数据传输程序设计者不必太多地关心socket程序设计的细节。 本节我们将介绍一个通用的网络程序接口它向上层提供几个简单的函数程序设计者只要使用这几个函数就可以完成绝大多数情考网考网下的网络数据传输。这些函数将socket编程和上层隔离开来它使用面向连接的流式套接字采用非阻塞的工作机制程序只要调用这些函数查询网络消息并作出相应的响应即可。这些函数包括 l InitSocketsStruct初始化socket结构获取服务端口号。客户程序使用。 l InitPassiveSock初始化socket结构获取服务端口号建立主套接字。服务器程序使用。 l CloseMainSock关闭主套接字。服务器程序使用。 l CreateConnection建立连接。客户程序使用。 l AcceptConnection接收连接。服务器程序使用。 l CloseConnection关闭连接。 l QuerySocketsMsg查询套接字消息。 l SendPacket发送数据。 l RecvPacket接收数据。