我刚开始学习 SOCKET编程。如下例子,我编译通过了。但是总是输出
无法建立SOCKET!输出了"opening stream socket--->:No Error"
/* File Name: streams.c */#include <winsock.h>#include <stdio.h>#define TRUE 1/* 这个程序建立一个套接字,然后开始无限循环;每当它通过循环接收到一个连接,
则打印出一个信息。当连接断开,或接收到终止信息,则此连接结束,程序再接收
一个新的连接。命令行的格式是:streams */
int 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 = 1001; 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)) < 0) perror("reading stream message"); if (rval == 0) printf("ending connection \n"); else printf("-->%s\n", buf); }while (rval != 0); closesocket(msgsock); } while (TRUE); /* 因为这个程序已经有了一个无限循环,所以套接字“sock”从来不显
式关闭。然而,当进程被杀死或正常终止时,所有套接字都将自动地被关闭。*/ exit(0);}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货