端口监控问题 。。。。。。 在线等

jiaowenhao 2007-08-18 11:13:46
我做了一个简单的聊天程序,分为客户端和服务端,然后又作了一个端口数据监控程序,想要监控服务端某端口的数据,可是当我打开监控程序后,服务端就不能接受到客户端的数据了,所有的数据都到了监控程序中,请高手指点
监控代码如下,主要是利用了端口复用技术,接受数据的方法与服务器端相同:
BOOL flag = TRUE;

if(setsockopt(m_Server, SOL_SOCKET, SO_REUSEADDR, (char *)&flag, sizeof(flag))
== SOCKET_ERROR)
{
AfxMessageBox("Socket set error!");
return FALSE;
}

m_ServerAddr.sin_family = AF_INET;
m_ServerAddr.sin_addr.s_addr = inet_addr("192.168.2.36"); //htonl(INADDR_ANY);
m_ServerAddr.sin_port = htons(1234);

if(bind(m_Server, (sockaddr *)&m_ServerAddr, sizeof(m_ServerAddr)) == SOCKET_ERROR)
{
AfxMessageBox("Socket bind error!");
closesocket(m_Server);
return FALSE;
}
...全文
310 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jjqingwa 2007-09-21
  • 打赏
  • 举报
回复
接收到数据后用个select方法转发下数据就可以了
jiaowenhao 2007-09-21
  • 打赏
  • 举报
回复
因为你的程序绑定了192.168.2.36 888,所以你必须通过127.0.0.1 888连接到原服务程序
这里还有一个前提就是你的服务器程序不要绑定特定的IP。


=====================================================================

我本机的IP地址就是192.168.2.36 888,然后通过127.0.0.1 888连接不也是连接到本计算机吗?我的服务器是绑定特定的IP。

我从网上查的网络监控的方法,其中就包括了port rebind技术,所以我就用了,可是不行。
vocanicy 2007-09-19
  • 打赏
  • 举报
回复
端口复用只有允许你使用当前占用的端口,并不能让你和原端口程序同时Accept新连接

不过可以这样,假设你的端口是888,可以在你的程序accept连接之后,将数据转发到原端口,其实就是你的程序起个中间代理人的作用,同时可以监控所有数据

因为你的程序绑定了192.168.2.36 888,所以你必须通过127.0.0.1 888连接到原服务程序
这里还有一个前提就是你的服务器程序不要绑定特定的IP。
jiaowenhao 2007-09-19
  • 打赏
  • 举报
回复
楼上的这句话“只能复用连接端口不能利用监听端口的”,我不明白啊
能不能在说明白点,谢谢了
shgmail 2007-08-25
  • 打赏
  • 举报
回复
端口利用不能这样用的,只能复用连接端口不能利用监听端口的,结果是未定义的,就算是利用连接端口也不可能得到其它进程接收到的数据的。。。
如果是自己写的程序直接就统计了啊,
如果不是可以考虑Hook到进程中去
jiaowenhao 2007-08-25
  • 打赏
  • 举报
回复
端口的重复绑定会引起阻塞吗?
可是我看有通过端口复用技术进行网络监听的啊
qq14923349 2007-08-23
  • 打赏
  • 举报
回复
WSAAsyncSelect
快查MSDN
这样是阻塞的

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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