工大后院

 找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 5348|回复: 10

VC++ close函数包含于那个头文件?

[复制链接]
发表于 2007-1-5 22:49 | 显示全部楼层 |阅读模式
VC++ close函数包含于那个头文件?
偶在做网络技术的实验,以前也没用过VC++.程序编译的时候说close函数未定义.
懂的帅哥靓姐给偶个指示,小弟不胜感谢.
发表于 2007-1-5 23:00 | 显示全部楼层
哪个 close ?

CSocket::close() ?
调用出错的代码是什么?
回复

使用道具 举报

 楼主| 发表于 2007-1-5 23:40 | 显示全部楼层
出错:
D:\server.cpp(71) : error C2065: 'close' : undeclared identifier

是用来关闭socket的
回复

使用道具 举报

发表于 2007-1-6 00:18 | 显示全部楼层
出错的代码……
回复

使用道具 举报

 楼主| 发表于 2007-1-7 21:38 | 显示全部楼层
#include <afxsock.h>
#include <stdio.h>
#pragma comment(lib,"ws2_32.lib")
#include <string.h>
#define closesocket close
#define PROTOPORT 5193
#define QLEN      6
int visits=0;

void main(int argc,char *argv[])

{
struct protoent *ptrp;
struct sockaddr_in sad;
struct sockaddr_in cad;
int sd,sd2;
int port;
int alen;
char buf[1000];

memset((char*)&sad,0,sizeof(sad));
sad.sin_family=AF_INET;
sad.sin_addr.s_addr=INADDR_ANY;

if(argc>1){
         port=atoi(argv[1]);
}
    else{
                port=PROTOPORT;
        }
if(port>0)sad.sin_port=htons((u_short)port);
else{
         fprintf(stderr,"bad port number %s\n",argv[1]);
     exit(1);
}

if(((int)(ptrp=getprotobyname("tcp")))==0){
         fprintf(stderr,"cannot map \"tcp\" to protocol number");
     exit(1);
}

sd=socket(PF_INET,SOCK_STREAM,ptrp->p_proto);
if(sd<0){
         fprintf(stderr,"socket creation failed\n");
         exit(1);
}

if(bind(sd,(struct sockaddr*)&sad,sizeof(sad))<0){
         fprintf(stderr,"bind failed\n");
         exit(1);
}

if(listen(sd,QLEN)<0){
         fprintf(stderr,"listen failed\n");
         exit(1);
}

while(1){
         alen=sizeof(cad);
         if((sd2=accept(sd,(struct sockaddr*)&cad,&alen))<0){
                 fprintf(stderr,"accept failed\n");
                 exit(1);
         }
         visits++;
         sprintf(buf,"This server had been contacted %d time %s\n",
                 visits,visits==1?".":"s.");
         send(sd2,buf,strlen(buf),0);
         closesocket(sd2);
}
}
回复

使用道具 举报

发表于 2007-1-8 19:50 | 显示全部楼层
查了下afxsocket.h 只有一个成员函数:Close()

而在winsock2.h 里面有个 closesocket(int SocketID)
回复

使用道具 举报

发表于 2007-1-8 19:51 | 显示全部楼层
调试环境VS.NET 2005
回复

使用道具 举报

 楼主| 发表于 2007-1-9 10:32 | 显示全部楼层
#include <winsock2.h>
#include <stdio.h>
#pragma comment(lib,"ws2_32.lib")
#include <string.h>
#define PROTOPORT 5193
#define QLEN      6
我把头文件改成了上面这样,因为winsock2.h有closesocket(),而没有close()。
运行后编译没有出错,但是.exe一开始运行就结束了。
麻烦大家再帮帮我,谢谢啦!
回复

使用道具 举报

发表于 2007-1-9 12:28 | 显示全部楼层
cannot map tcp to protocol number...
回复

使用道具 举报

发表于 2007-1-9 12:33 | 显示全部楼层
什么原因就不知道了,还没学SOCKET,CSocket更没看过

给个建议:出错信息打出来了,总要给自已看到才好吧?
在exit(1)前加个 getchar() 就方便多了
回复

使用道具 举报

 楼主| 发表于 2007-1-9 23:02 | 显示全部楼层
#ifdef WIN32
WSADATA wsaData;
WSAStartup(0x0101,&wsaData);
#endif
对比书上,发现少了这段代码,终于可以运行了。就是不知道这段代码有什么用。
谢谢楼上
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

QQ|Archiver|手机版|小黑屋|广告业务Q|工大后院 ( 粤ICP备10013660号 )

GMT+8, 2025-5-15 18:03

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表