面向连接的套接字连接失败,不懂!请大哥大姐们指点!在线等!
我做了一C/S的程序
首先我说明一下我程序出现的问题:
1.我先启动服务器端,然后建立服务器。
2.我启动客户端,连接,然后出现错误:
在客户端,显示连接失败,用GetLastError()获取错误为零!
然后服务器端也出现这样的问题:弹出一个对话框显示:
Tickets_Sell.exe 遇到问题需要关闭。我们对此引起的不便表示抱歉。
................
代码:
1,服务器端的主要代码如下:
void CTickets_SellView::OnBtnServer()
{
// TODO: Add your control notification handler code here
if(IsSetup==TRUE)
{
return;
}
//CServerSock Sock;
//CArray<CServerSock*,CServerSock*> data;
//pSock=new CServerSock();
Sock.InitSock(this);
BOOL result;
result=Sock.Create(9000,SOCK_STREAM);
if(result==FALSE)
{
Sock.Close();
CString errorcode;
errorcode.Format("%d",GetLastError());
errorcode+="创建套接字失败";
AfxMessageBox(errorcode);
return;
}
if(!Sock.Listen())
{
Sock.Close();
CString error;
error.Format("监听失败:%d",GetLastError());
AfxMessageBox(error);
return;
}
CString text;
CWnd *pWnd=NULL;
pWnd=GetDlgItem(IDC_STATIC_CONNNUM);
pWnd->SetWindowText("当前连数:0");
OnBtnSetup();
IsSetup=TRUE;
return;
}
客户端的主要代码如下:
void CClientSocket::ConnectionToServer(CString buffer)
{
struct in_addr addr_to;
if((addr_to.S_un.S_addr=inet_addr(buffer))== INADDR_NONE)
{
AfxMessageBox("IP地址格式不正确");
return ;
}
if(buffer.IsEmpty())
{
AfxMessageBox("请输入服务器IP地址");
return;
}
if(Create(7000)==FALSE)
{
Close();
CString error;
error.Format("创建套接字失败:%d",GetLastError());
AfxMessageBox(error);
}
/*CString address;
address.Format("%d",inet_addr(buffer));
AfxMessageBox(address);*/
SOCKADDR_IN addrto;
addrto.sin_family=AF_INET;
addrto.sin_addr.S_un.S_addr=inet_addr(buffer);
addrto.sin_port=htons(9000);
BOOL result;
result=Connect((SOCKADDR*)&addrto,sizeof(SOCKADDR));
if(result==FALSE)
{
Close();
CString error;
error.Format("连接服务器失败:%d",WSAGetLastError());
AfxMessageBox(error);
return ;
}
}
void CTickets_ClientDlg::OnConnect()
{
// TODO: Add your command handler code here
CWnd *pWnd;
pWnd=GetDlgItem(IDC_EDIT_IP);
CString buffer;
pWnd->GetWindowText(buffer);
//MessageBox(buffer);
//pClientSocket->InitSock(this);
pClientSocket->ConnectionToServer(buffer);//调用上面的函数!
}