1

这很难用几句话来解释。在过去的 5 天里,我一直在试图解决这个问题,所以现在我作为最后的手段在这里问。我正在尝试使用由斯坦福大学计算台球组构建的带有锦标赛服务器的台球物理库,可在http://www.stanford.edu/group/billiards/获得

它提供了一个使用 apache2、postgresql 和 perl 的锦标赛服务器。我已经能够启用登录或创建简单匹配等功能,但与 AI 客户端的通信不起作用。客户端是我在终端中运行的 C++ 应用程序,它从服务器获取命令并打印此错误:

XMLRPC error: Unable to transport XML to server and get XML response back.  HTTP response code is 500, not 200

apache2 error.log 正在打印:

[Thu May 17 21:30:17 2012] [error] [client 127.0.0.1] Premature end of script headers: api.pl

我尝试使用 CGI::Debug 运行它,但没有得到更多输出。我已经能够通过一些调试输出(每行后一个:))识别它失败的行,并且它在这个函数中,在打印 STDERR 之间的行上:

package Pool::Rules::GameState;

sub addToDb {
  my $self=shift;
  my $timeleft=shift || $self->timeLeft();
  my $timeleft_opp=shift || $self->timeLeftOpp();
#print STDERR "uh uh uh".$self." ".$self->timeLeft()." ".$self->timeLeftOpp()." ".$timeleft." ".$timeleft_opp."\n";
  my $playingSolids = ($self->isOpenTable() ? undef : ($self->playingSolids()?1:0));
 # print STDERR "addToDb: X".$self->isOpenTable()."X Y".$self->playingSolids()."Y Z".$playingSolids."Z\n";
  $Pool::dB::dbh->do('INSERT INTO states (turntype,cur_player_started,playing_solids,timeleft,timeleft_opp,gametype) VALUES (?,?,?,?,?,?)',{},
                     $self->getTurnType(),$self->curPlayerStarted()?1:0,$playingSolids,$timeleft,$timeleft_opp,$self->gameType()) or STDERR $DBI::errstr;
  my $stateid=$Pool::dB::dbh->selectrow_array('SELECT lastval()');
  $self->tableState()->addToDb($stateid);
  return $stateid;
}

这只是简单的getter方法。而且,它只是停止执行。getter-methods 的代码由 swig 生成。第一个打印行打印:

uh uh uhPool::Rules::GameState=HASH(0x99fa99c) 0 0 00:10:00 00:10:00

这似乎没问题,只是好奇 $self->-getters 只打印 0。由于该库来自斯坦福大学并且已经举行了实际比赛,我很难相信这是代码中的错误. 它似乎有点太旧了(我不得不在其他地方进行一些调整以使其适用于更新版本的库,f.ex。我在另一个与此无关的文件中添加了一个 < cstddef >-include perl 问题)。我首先尝试让它在当前版本上运行,但我失败了。然后我尝试将它安装在经过测试的 readme.txt 版本(Ubuntu 8.10、Perl 5.10 等)上,但在某些时候我的 Ubuntu 8.10 安装总是死机,我不得不重新安装(我试过这个 ~4次,gnome 终端总是分段错误)。所以现在我 我回到 Ubuntu 12 试图让它工作。我对 perl 知之甚少,只有在过去几天试图让它运行时我能学到的一点点。

有谁知道什么会引发这种行为?有人知道可能与此相关的任何兼容性问题吗?如果您需要任何其他信息,请询问,我会提供。

谢谢您的帮助!

4

0 回答 0