In mfc, a simple transceiver is written with TCP/IP socket programming, but the client's accept() old connection cannot be 0
maqilei1582013.09.06Browse 899TimesShareReport
The sender's sending code:
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("Connection failed!");
}
CString strSend;
GetDlgItemText(IDC_EDIT1,strSend);
send(sockClient,strSend,strlen(strSend)+1,0);
SetDlgItemText(IDC_EDIT1,"");
closesocket(sockClient);
WSACleanup();
}
The receiving code of the receiving end:
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);
}
}
When the originator runs to accept(), it can't run anymore. A prompt window will pop up..