找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 3601|回复: 6

跪求大虾们帮忙解决一个问题

[复制链接]
发表于 2007-12-31 22:22:24 | 显示全部楼层 |阅读模式
#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[1]:"index.html";
    const char *server_hostname=argc>2?argv[2]:"ace.ece.uci.edu";
char buf[BUFSIZ];
iovec iov[3];
iov[0].iov_base="GET";
iov[0].iov_len=4;
iov[1].iov_base=(char*)pathname;
    iov[1].iov_len=strlen((char*)pathname);
iov[2].iov_base="HTTP/1.0\r\n\r\n";
iov[2].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 *)" ([email=?get_url_pathname@@YAPADPAVACE_SOCK_Stream@@@Z]?get_url_pathname@@YAPADPAVACE_SOCK_Stream@@@Z[/email])
Debug/mySocket.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.


帮忙解决啊
发表于 2008-3-11 23:22:44 | 显示全部楼层
你有实现这个extern char *get_url_pathname (ACE_SOCK_Stream *)函数吗?
发表于 2008-3-12 01:16:08 | 显示全部楼层
get_url_pathname
这个某似是c++网络编程 I卷 里面的一个不带实现的例子函数声名
发表于 2008-3-12 16:34:34 | 显示全部楼层
这个方法的实现,你没有编译,导致无法链接。
找一下,加到工程中去。
发表于 2008-3-18 15:04:49 | 显示全部楼层
这个函数要自己写的呀。。。。
其实你自己定义的路径代替也可以的。。。。
发表于 2008-4-3 21:39:51 | 显示全部楼层
这是在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[1] : "index.html";
const char* server_hostname =
  argc > 2 ? argv[2] : "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[BUFSIZ];
iovec iov[3];
iov[0].iov_base = "GET ";
iov[0].iov_len = 4;  //Length of "GET ".
iov[1].iov_base = (char*)pathname;
iov[1].iov_len = strlen(pathname);
iov[2].iov_base = " HTTP/1.0\r\n\r\n";
iov[2].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:。。。
。。。
。。。(略)

何故啊?????
发表于 2008-6-5 23:57:58 | 显示全部楼层

解决办法

将:pathname(get_url_pathname(&peer));
改为自己要处理的地址就可以了。如127.0.0.1
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-12-23 19:09 , Processed in 0.023221 second(s), 7 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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