您好,不好意思打搅您!
我这个程序(附接口说明)
A机IP地址:9.97.155.110,端口:9999
B机IP地址:198.0.0.68,端口:8080
本地侦听端口:8888
流程大概如下:
A机发起:A机->本地(拆包,存数据库,打包,发送到B机)->B机接收处理->返回->本地(拆包,修改数据库,打包到A机)->A机
B机发起:流程刚好跟A机发起相反。
我是初接触VC一个月差不多,所以对Socket起有点模糊,也搞不清,弄了好长时间还是不太懂。周围的人也没有怎么懂的,所以才出此下策。
在本地服务器的主对话框的:
void CBtoBDlg::OnInitDialog()
{
//初始化数据库
......
m_SocketListen=new CListeningSocket(this);
m_SocketListen->Create(8888);
if(!m_SocketListen->Listen())
{
m_Bar.SetPaneText(1,_T("侦听失败......"));
return true;
}
return true;
}
//CListeningSocket和CClientSocket类从CSocket类派生出来,重载OnAccept()和OnReceive()
//接收客户机A和B
void CBtoBDlg::OnAccept()
{
CClientSocket *pSocket=new CClientSocket(this);
if(m_SocketListen->Accept(*pSocket))
{
m_ConnectionList.AddTail(pSocket);
}
else
delete pSocket;
}
void CBtoBDlg::OnReceive(CClientSocket* pSocket)
{
//到这里我就搞糊涂了,我怎么知道是A发来呢还是B发来呢
如果A发来,我拆包插数据表AtoB,再处理,如果处理失败马上返回给A出错信息,处理成功则发给B,B处理返回到本地修改数据库,再组包发送给A,这样一笔交易算完成。
//如果B发来,则相反,除了数据库是BtoA吧了。
//好像从一些资料上看到用getpeername得到IP地址来判断???}
您能否帮我看看,万分感谢!!!我现在居然一条线路一个程序,就是说有二个程序在运行,一个用来接收A发起的,一个用来接收B发起的,连我自己感觉都很可笑!
我这个程序(附接口说明)
A机IP地址:9.97.155.110,端口:9999
B机IP地址:198.0.0.68,端口:8080
本地侦听端口:8888
流程大概如下:
A机发起:A机->本地(拆包,存数据库,打包,发送到B机)->B机接收处理->返回->本地(拆包,修改数据库,打包到A机)->A机
B机发起:流程刚好跟A机发起相反。
我是初接触VC一个月差不多,所以对Socket起有点模糊,也搞不清,弄了好长时间还是不太懂。周围的人也没有怎么懂的,所以才出此下策。
在本地服务器的主对话框的:
void CBtoBDlg::OnInitDialog()
{
//初始化数据库
......
m_SocketListen=new CListeningSocket(this);
m_SocketListen->Create(8888);
if(!m_SocketListen->Listen())
{
m_Bar.SetPaneText(1,_T("侦听失败......"));
return true;
}
return true;
}
//CListeningSocket和CClientSocket类从CSocket类派生出来,重载OnAccept()和OnReceive()
//接收客户机A和B
void CBtoBDlg::OnAccept()
{
CClientSocket *pSocket=new CClientSocket(this);
if(m_SocketListen->Accept(*pSocket))
{
m_ConnectionList.AddTail(pSocket);
}
else
delete pSocket;
}
void CBtoBDlg::OnReceive(CClientSocket* pSocket)
{
//到这里我就搞糊涂了,我怎么知道是A发来呢还是B发来呢
如果A发来,我拆包插数据表AtoB,再处理,如果处理失败马上返回给A出错信息,处理成功则发给B,B处理返回到本地修改数据库,再组包发送给A,这样一笔交易算完成。
//如果B发来,则相反,除了数据库是BtoA吧了。
//好像从一些资料上看到用getpeername得到IP地址来判断???}
您能否帮我看看,万分感谢!!!我现在居然一条线路一个程序,就是说有二个程序在运行,一个用来接收A发起的,一个用来接收B发起的,连我自己感觉都很可笑!
解决方案 »
- 谁对Installfiled中几个事函数比较了解 请解!!!
- 救命啊 ,三天了都不知道问题错在哪?
- 求助:怎么比较两个字符串的大小是否相等,谢谢!
- HTTP协议的问题
- OATree.obj : error LNK2001: unresolved external symbol "public: virtual long __stdcall CTree::GetChildNodes(struct tagVARIANT,st
- 如何知道某个端口被哪个进程使用??
- 回调函数问题
- 一个有关vc的窗口工程的编译问题,换一种提问方式就是“error LNK2001:unresolved external symbol _main”该怎么给它解决掉?
- cimage
- 怎样自己做一个图标符号工具箱,可实现拖放工具箱中图标符号到Dialog?
- 调用CFontDialog,怎样初始化它的选择项?
- 从即时战略游戏中想到的问题
你的A和B是同一个程序还是分为服务器和客户机?
1.要是分开的服务器和客户机,那就不用想这么多了,建立连接后在B上只管接收,然后(拆包,修改数据库,打包到A机),A上只管发送数据包。
2.如果你的程序是服务器和客户机共用一个程序,那么你在初始化程序的时候做一个标志,标明启用的是A还是B,在OnReceive()中用个判断语句就可以了
void CBtoBDlg::OnReceive(CClientSocket* pSocket)
{
if(m_bAorB)//m_bAorB是用来标明启用的是A还是B的bool变量
{
//如果是启用A,则按A的处理方法处理
}
else
{
//如果是启用B,则按B的处理方法处理
}
}