printf(\ } } while (1); } int _tmain(int argc, _TCHAR* argv[]) {
/*指定socket版本,否则创建socket失败,即使创建socket返回值不为-1,但是bind时会失败*/
wVersionRequested = MAKEWORD( 2, 2 ); err = WSAStartup( wVersionRequested, &wsaData ); if ( err != 0 ) return -1; /* 建立套接字*/
sock = socket(AF_INET, SOCK_STREAM, 0); if (sock < 0) {
perror(\ exit(1); }
/* 使用任意端口命名套接字*/ server.sin_family = AF_INET; server.sin_port = htons(MYPORT);
server.sin_addr.s_addr = inet_addr(SERVER_IP_ADDR); memset(server.sin_zero, 0, sizeof(server.sin_zero)); //将服务器地址与socket绑定在一起
rval = bind(sock, (struct sockaddr *)&server, sizeof(server)); if (rval < 0) {
perror(\ exit(1); }
// 找出指定的端口号并打印出来 length = sizeof(server);
if (getsockname(sock, (struct sockaddr *)&server, &length) < 0) {
perror(\ exit(1); }
printf(\套接口号为:%d\\n\ // 开始接收连接,最大请求数为 listen(sock, 5);
len = sizeof(struct sockaddr); do
{ msgsock = accept(sock, (struct sockaddr *)&tcpaddr, (int *)&len); if (msgsock == -1) perror(\ else
{ memset(buf, 0, sizeof(buf));
if ( (rval = recv(msgsock, buf, sizeof(buf),0) < 0)) perror(\
if (rval == 0) { time(&timep); p=localtime(&timep); printf(\p->tm_hour, p->tm_min, p->tm_sec,bufrec); printf(\ }
}
closesocket(msgsock); } while (TRUE);
/* 因为这个程序已经有了一个无限循环,所以套接字\从来不显式关闭。然而,当进程被杀死或正常终止时,所有套接字都将自动地被关闭。*/ closesocket(msgsock); return 0; }
(5)请详细说明此实验在设计及运行时遇到的问题和解决办法,及实验体会及建议。
在实验设计的过程中会遇到很多的问题,如实现各种功能时,实现顺序的问题,以及时间计算过程中的各种指针存在的存储空间的冲
突问题。在调用各种函数的过程中会遇到不能使用的状况,是因为源程序中没有包含使用该函数的头文件。实验过程中不能正确的认识各个函数的功能,以及灵活地使用结构体,对建立连接的过程没有一个很清楚地把握,通过查询各种资料和同学之间相互交流,解决了一些难以下手的问题,通过本次试验,socket编程有了一个深刻的了解,对其过程的建立也有了一个大致的了解。