如何在服务中获得客户端的IP?

yizhao 2002-12-03 01:44:58
我写了个服务如下,调用TMIB,但是获得为空

#include <fml32.h>
#include <tpadm.h>
#include <stdio.h>
#include <ctype.h>
#include <atmi.h> /* TUXEDO Header File */
#include <userlog.h> /* TUXEDO Header File */

/* tpsvrinit is executed when a server is booted, before it begins
processing requests. It is not necessary to have this function.
Also available is tpsvrdone (not used in this example), which is
called at server shutdown time.
*/

#if defined(__STDC__) || defined(__cplusplus)
tpsvrinit(int argc, char *argv[])
#else
tpsvrinit(argc, argv)
int argc;
char **argv;
#endif
{
/* Some compilers warn if argc and argv aren't used. */
argc = argc;
argv = argv;

/* userlog writes to the central TUXEDO message log */
userlog("Welcome to the simple server");
return(0);
}

/* This function performs the actual service requested by the client.
Its argument is a structure containing among other things a pointer
to the data buffer, and the length of the data buffer.
*/

#ifdef __cplusplus
extern "C"
#endif
void
#if defined(__STDC__) || defined(__cplusplus)
MYMIB(TPSVCINFO *rqst)
#else
MYMIB(rqst)
TPSVCINFO *rqst;
#endif
{
long blen;
FBFR32 *ibuf;

char mystr[1000]="";

ibuf = (FBFR32 *)tpalloc("FML32", NULL, 10000);
userlog("0");
Fchg32(ibuf, TA_OPERATION, 0, "GET", 0);
Fchg32(ibuf, TA_CLASS, 0, "T_CLIENT", 0);
userlog("1");
Fprint32(ibuf);

userlog("2");
if (tpcall(".TMIB", (char *)ibuf, 0, (char **)&ibuf, &blen, 0) == -1)
{
printf("tpcall(.TMIB) failed: %s\n", tpstrerror(tperrno));
Fprint32(ibuf);
userlog("call error");
tpreturn(TPSUCCESS, 0, rqst->data, 0L, 0);
}
userlog("3");
/* if (tpadmcall(ibuf, &ibuf, 0) == -1)
{
printf("tpcadmcall() failed: %s\n", tpstrerror(tperrno));
Fprint32(ibuf);
return(-1);
}*/


Fget32(ibuf,TA_NADDR,0,mystr,0);

userlog("%s",ibuf);

tpfree((char *)ibuf);

tpterm();

tpreturn(TPSUCCESS, 0, rqst->data, 0L, 0);
}


谁能解决一下这个问题?
...全文
47 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaoyebing 2002-12-27
  • 打赏
  • 举报
回复
request.getRemoteAddr()
request.getRemoteHost()
request.getRemoteUser()

查查request提供的方法就可以了
armyshu 2002-12-27
  • 打赏
  • 举报
回复
getRemoteAdrr()方法调用
ZEROSolid 2002-12-17
  • 打赏
  • 举报
回复
靠!大哥,你把这么一堆代码写上去让谁看啊!
你是否应该总结一下问题所在,写得精炼一点
这样才会得到比较有价值的答复
nullhue 2002-12-12
  • 打赏
  • 举报
回复
让客户端把他的IP地址发过来.
这要看你手段了.
seani 2002-12-06
  • 打赏
  • 举报
回复
我也想知道,帮你up
1、本课程是一个干货课程,主要讲解如何封装服务器底层,使用Tcp/ip长连接,IDE使用vs2019 c++开发以及使用c++11的一些标准,跨平台windows和linux,服务器性能高效,单服务器压力测试上万无压力,服务器框架是经历过上线产品的验证,框架简单明了,不熟悉底层封装的人,半个小时就能完全掌握服务器框架上手写业务逻辑。2、本课程是一个底层服务器框架教程,主要是教会学员在windows或linux下如何封装一个高效的,避免踩坑的商业级框架,服务器底层使用初始化即开辟内存的技术,使用内存池,服务器运行期间内存不会溢出,非常稳定,同时服务器使用自定义哈希hashContainer,在处理新的连接,新的数据,新的封包,以及解包,发包,粘包的过程,哈希容器性能非常高效,增、删、查、改永远不会随着连接人数的上升而降低性能,增、删、查、改的复杂度永远都是恒定的O(1)。3、服务器底层封装没有使用任何第三方网络库以及任何第三方插件,自由度非常的高,出了任何BUG,你都有办法去修改,查找问题也非常方便,在windows下使用iocp,linux下使用epoll.4、讲解c++纯客户端,主要用于服务器之间通信,也就是说你想搭建多层结构的服务器,服务器与服务器之间使用socket通信。还可以使用c++客户端做压力测试,开辟多线程连接服务器,教程提供了压力测试,学员可以自己做压力测试服务器性能。5、赠送ue4和unity3d通信底层框架以及多人交互demo,登录,注册,玩家离开,同步主要是教会学员服务器与客户端如何交互。6、赠送c++连接mysql数据库框架demo,登录,注册,玩家离开数据持久化.7、服务器教程使用自定义通信协议,同时也支持protobuf,选择权在开发者自己手里,想用什么协议都可以,自由度高。8、服务器教程使用手动敲代码逐句讲解的方式开展教学课程。非喜勿喷,谢谢大家。9、服务器教程提供源码,大家可以在平台提供的地址下载或者联系我,服务器使用c++11部分标准,std::thread,条件变量,线程锁,智能指针等,需要学员具备一定c++知识,购买前请慎重考虑。

1,221

社区成员

发帖
与我相关
我的任务
社区描述
企业软件 中间件技术
社区管理员
  • 中间件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧