mfc中用TCP/IP socket编程来写了一个简单的收发端,可客户端的accept()老连接不上0
maqilei1582013.09.06浏览899次分享举报
发端的发送代码:
void CMyChatDlg::OnButton1()
{
// TODO: Add your control notification handler code here
DWORD dwIP;
((CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESS1))->GetAddress(dwIP);
SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=inet_addr("192.168.0.124");
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(8005);
int retval=connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
if(SOCKET_ERROR==retval)
{
closesocket(sockClient);
MessageBox("连接失败!");
}
CString strSend;
GetDlgItemText(IDC_EDIT1,strSend);
send(sockClient,strSend,strlen(strSend)+1,0);
SetDlgItemText(IDC_EDIT1,"");
closesocket(sockClient);
WSACleanup();
}
收端的接收代码:
void CMyRecvDlg::OnChangeEditRecv()
{
// TODO: If this is a RICHEDIT control, the control will not
// send this notification unless you override the CDialog::OnInitDialog()
// function and call CRichEditCtrl().SetEventMask()
// with the ENM_CHANGE flag ORed into the mask.
// TODO: Add your control notification handler code here
SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(8005);
bind(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
listen(sockClient,5);
SOCKADDR_IN addrClient;
int len=sizeof(SOCKADDR);
while(1)
{
SOCKET sockConn=accept(sockClient,(SOCKADDR*)&addrClient,&len);
char recvBuf1[50],recvBuf2[50];
recv(sockConn,recvBuf1,50,0);
sprintf(recvBuf2,"%s\n",recvBuf1);
CString s=(char*)recvBuf2;
GetDlgItemText(IDC_EDIT_RECV,s);
closesocket(sockConn);
}
}
发端运行到accept()那就运行不下去了..就弹出提示窗口..