用TCP的方式连接,为什么在服务器那端无法响应客户端?

lwfqt 2007-05-08 02:18:54
1.用ClientSocket和ServerSocket连接,但从客户端那边通过按下键盘按钮来对服务器进行控制,所以在FormKeyDown那里写事件,但服务器这边无法捕捉客户端键盘按下而发送过来的信息!请高人求解!
2.请看下面一段代码:
AnsiString strSQL;
strSQL="insert into jiance (取号,登录,登录状态,上线,上线状态,缴费) values (1,0,0,0,0,0) ";
ADOQuery1->Close();
ADOQuery1->SQL->Add(strSQL);
ADOQuery1->ExecSQL();
为什么我每INSERT一次都不是一条一条的插入,而是第一次1条,第2次同时插入了2条,第3次同时插入了3条!怎样才能实现每次插入一条数据?
请高人求解!
...全文
285 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
lwfqt 2007-05-08
  • 打赏
  • 举报
回复
很感谢 Ring_Pt(已是黄昏独自愁)
通过你的热心帮助,我学会了很多知识!谢谢你!
Jim@luckeeinc.com 2007-05-08
  • 打赏
  • 举报
回复
客户端
void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,
TShiftState Shift)
{
if(Key == 112)
ClientSocket1->Socket->SendText("D");
}

服务器
void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender,
TCustomWinSocket *Socket)
{
String str = Socket->ReceiveText().Trim();
if(str == "D")
{
ShowMessage("OK");
}
}


测试通过
在客户端按下F1的时候 服务器上就会showmessage
lwfqt 2007-05-08
  • 打赏
  • 举报
回复
上面说到:按照你的方法的确收到的信息为112,D,S113,J114!
所以发送的不是D,S,J!所以实现不了函数!
lwfqt 2007-05-08
  • 打赏
  • 举报
回复

void __fastcall TMForm::ServerSocket1ClientRead(TObject *Sender,
TCustomWinSocket *Socket)
{
if(Socket->ReceiveText()=="G")
{
MForm->QuHao();
}
if(Socket->ReceiveText()=="D")
{
ShowMessage("denglu");
//MForm->DengLu();
}
if(Socket->ReceiveText()=="S")
{
MForm->ShangXian();
}
if(Socket->ReceiveText()=="J")
{
MForm->JiaoFei();
}
//ShowMessage(Socket->ReceiveText());
}
这个也应该没错吧!我的函数也没错,但按下F1之后还是不能实现那个函数!
Jim@luckeeinc.com 2007-05-08
  • 打赏
  • 举报
回复
你说的修改是?
你的要求是服务器接收到客户端的D,S,J
还是要再做什么处理?
lwfqt 2007-05-08
  • 打赏
  • 举报
回复
TO:Ring_Pt(已是黄昏独自愁)
按照你的方法的确收到的信息为112,D,S113,J114!
之后应该如何修改?
Jim@luckeeinc.com 2007-05-08
  • 打赏
  • 举报
回复
如果要实现你的功能也是一样的
客户端的程序不用变 我就是用你写的测试的
服务器上的程序就是上面的那个
我这里测试是可以的
Jim@luckeeinc.com 2007-05-08
  • 打赏
  • 举报
回复
客户端和服务器确实不是一个程序
客户端上放的是ClientSocket 服务器上放的是ServerSocket

在客户端程序上的onkeydown事件里写
String str = Key;
ClientSocket1->Socket->SendText(str);

在服务器程序上serverSocket的ClientRead里写
void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender,
TCustomWinSocket *Socket)
{
ShowMessage(Socket->ReceiveText());
}
lwfqt 2007-05-08
  • 打赏
  • 举报
回复
to:Ring_Pt(已是黄昏独自愁)
第2个问题OK了!
我的第1个问题
void __fastcall TMainForm::FormKeyDown(TObject *Sender, WORD &Key,
TShiftState Shift)
{
if(Key==112)
{
ClientSocket1->Socket->SendText("D");
}
if(Key==113)
{
ClientSocket1->Socket->SendText("S");
}
if(Key==114)
{
ClientSocket1->Socket->SendText("J");
}

}
用的就是SendText,但还是无法响应!
wj_mailbox 2007-05-08
  • 打赏
  • 举报
回复
2、Ring_Pt(已是黄昏独自愁) 是正解
wj_mailbox 2007-05-08
  • 打赏
  • 举报
回复
1、客户端和服务器应该不是一个程序,FormKeyDown事件只对当前程序中的按键响应,如果服务器要捕捉客户端按键信息,必须用键盘钩子。
2、看程序应该是只插入一条记录,是不是其他代码引起的。
Jim@luckeeinc.com 2007-05-08
  • 打赏
  • 举报
回复
1.在客户端keydown的时候用Client Socket 的 sendtext
2.
ADOQuery1->Close();
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add(strSQL);
ADOQuery1->ExecSQL();

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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