C++ Builder中Socket 套接字问题

来源:百度知道 编辑:UC知道 时间:2024/05/24 20:13:10
小弟在做聊天程序,需要客户端输入用户名和密码,在服务器端查询数据库通过后向客户端发送登陆成功信息。现在的问题是,我想在每条命令前加一个标记头部~,作为命令间的标志,现在的问题是,加了头部后就报错,说TCP套接字没有建立连接,请大家分析下。

//---------------------------------------------------------------------------
void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender,
TCustomWinSocket *Socket)
{ AnsiString sCheck,sRegister,Receive,sChat,sUserInfo,sTo,sWelcome,sGo,sTempName,sTemp,ss,Wname,Bname,ReceiveTemp;
int iPos,iIndex,j,m,s,iIndexTemp,Bindex,Windex;
int i=2,t;
rUserName="";
rPassWord="";
Receive="";
ReceiveTemp=Socket->ReceiveText()+"~";

for(int n=1;n<ReceiveTemp.Length()+1;n++)
{

if(ReceiveTemp[n]=='~')
{
if(Receive=="");
else
{
HandleReceive(Receive);

Memo3->Lines->Add(Receive);
Receive=“”;
}

这一句运行到了吗?
ShowMessage("123");

看看SQL语句有没有错:
sCheck="Select * from UserInfo where UserName = '" + rUserName + "' and PassWord = '"+rPassWord+"' ";

另外 如果需要,应该把 TCustomWinSocket *Socket 传入到函数 HandleReceive中使用。

1.简单服务器
//#include <winsock2.h>
//#pragma comment(lib,"WS2_32.lib")
WSADATA wsd;
static UINT port=%%1;
UINT Listen(LPVOID pParam)
{
SOCKET sServer,sClient;
char buf[1024];
int retVal;
if(WSAStartup(MAKEWORD(2,2),&wsd)!=0)
{
return -1;//失败
}
sServer=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(INVALID_SOCKET==sServer)
{
WSACleanup();
return -1;//创建套接字失败
}
SOCKADDR_IN addrServ;
addrServ.sin_family=AF_INET;
addrServ.sin_port=htons((short)pParam);
addrServ.sin_addr.s_addr=INADDR_ANY;
retVal=bind(sServer,(LPSOCKADDR)&addrServ,sizeof(SOCKADDR_IN));
if(SOCK