跪求大虾们帮忙解决一个问题
#include <iostream.h>#include <fstream.h>
#include "myinit.h"
#include "ace/INET_Addr.h"
#include "ace/SOCK_Connector.h"
#include "ace/SOCK_Stream.h"
#include "ace/Time_Value.h"
#include "ace/Auto_Ptr.h"
#include "ace/Sock_Acceptor.h"
#include "ace/Mem_Map.h"
extern char *get_url_pathname (ACE_SOCK_Stream *);
int main(int argc,char *argv[])
{
const char *pathname=argc>1?argv:"index.html";
const char *server_hostname=argc>2?argv:"ace.ece.uci.edu";
char buf;
iovec iov;
iov.iov_base="GET";
iov.iov_len=4;
iov.iov_base=(char*)pathname;
iov.iov_len=strlen((char*)pathname);
iov.iov_base="HTTP/1.0\r\n\r\n";
iov.iov_len=13;
ACE_SOCK_Connector connector;
ACE_SOCK_Stream peer;
ACE_INET_Addr peer_addr;
ACE_SOCK_Acceptor acceptor;
if(peer_addr.set(80)==-1)//,server_hostname)==-1)
return 1;
if(acceptor.open(peer_addr)==-1)
return 1;
for(;;){
if(acceptor.accept(peer)==-1)
return 1;
peer.disable(ACE_NONBLOCK);
ACE_Auto_Array_Ptr <char> pathname(get_url_pathname(&peer));
ACE_Mem_Map mapped_file(pathname.get());
if(peer.send_n(mapped_file.addr(),mapped_file.size())==-1)
return 1;
peer.close();
}
return peer.close()==-1?1:0;
return 0;
}
问题是extern char *get_url_pathname (ACE_SOCK_Stream *);不能编译
错误提示
ymain.obj : error LNK2001: unresolved external symbol "char * __cdecl get_url_pathname(class ACE_SOCK_Stream *)" (?get_url_pathname@@YAPADPAVACE_SOCK_Stream@@@Z)
Debug/mySocket.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
帮忙解决啊 你有实现这个extern char *get_url_pathname (ACE_SOCK_Stream *)函数吗? get_url_pathname
这个某似是c++网络编程 I卷 里面的一个不带实现的例子函数声名 这个方法的实现,你没有编译,导致无法链接。
找一下,加到工程中去。 这个函数要自己写的呀。。。。
其实你自己定义的路径代替也可以的。。。。 这是在c++NPV1 书中的第3章中的web server的程序、 以及它之前的一个程序不知道怎么调试出正确的结果。
他之前的一个程序是 web client的:
#include "stdafx.h"
#include "ace/INET_Addr.h"
#include "ace/SOCK_Connector.h"
#include "ace/SOCK_Stream.h"
int main(int argc, char* argv[])
{
const char* pathname =
argc > 1 ? argv : "index.html";
const char* server_hostname =
argc > 2 ? argv : "ace.ece.uci.edu";
ACE_SOCK_Connector connector;
ACE_SOCK_Stream peer;
ACE_INET_Addr peer_addr;
if( peer_addr.set( 80, server_hostname ) == -1)
return 1;
else if ( connector.connect ( peer, peer_addr ) == -1 )
return 1;
//...
char buf;
iovec iov;
iov.iov_base = "GET ";
iov.iov_len = 4;//Length of "GET ".
iov.iov_base = (char*)pathname;
iov.iov_len = strlen(pathname);
iov.iov_base = " HTTP/1.0\r\n\r\n";
iov.iov_len = 13;//Length of " HTTP/1.0\r\n\r\n".
if(peer.sendv_n(iov , 3) == -1)
return 1;
for( ssize_t n ; (n = peer.recv(buf , sizeof buf ) ) >0 ;)
ACE::write_n ( ACE_STDOUT , buf , n);
return (peer.close() == -1 ? 1 : 0);
}
我的结果是能显示,但是是
HTTP/1。1 400 BAD REQUEST
DATE:。。。。略
SERVER:。。。
。。。
。。。(略)
何故啊?????
解决办法
将:pathname(get_url_pathname(&peer));改为自己要处理的地址就可以了。如127.0.0.1
页:
[1]