18,363
社区成员




服务端代码如下:
//SOCKET m_server ; //这个在头文件里定义了
m_server = socket(AF_INET,SOCK_STREAM,0);
if(省略)
{省略
}
SOCKADDR_IN m_sockaddr;
m_sockaddr.sin_family=AF_INET;
m_sockaddr.sin_port =htons(6000);
m_sockaddr.sin_addr.S_sun.S_addr = htonl(INADDR_ANY);
int retval
retval = bind(m_server,(SOCKADDR*)&m_sockaddr,sizeof(SOCKADDR));
if(SOCKET_ERROR=retval)
{省略
}
if(listen(m_server,5)<0)
{省略
}
int len=sizeof(SOCKADDR);
//SOCKET sockConn; //这个在头文件里定义了
//SOCKET addClientAddress;//这个在头文件里定义了
sockConn=accept(m_server,(SOCKADDR*)&addClientAddress,&len);
//这里加断点能看到addClientAddress里的地址是127.0.0.1
//struct RECVPARAM //这个结构体在头文件里定义
//{ SOCKET sock;
// HWND hwnd;
// SOCKADDR_IN saddr_in;
//}
if(sockConn!=-1)
{
RECVPARAM *pRecvParam = new RECVPARAM;
pRecvParam ->sock=sockConn;
pRecvParam ->hwnd=m_hWnd;
pRecvParam ->saddr_in = addClientAddress;
//开接收数据的线程:
HANDLE hTread=CreateThread(NULL,0,RecvpRroc,(LPVOID)pRecvParam,0,NULL);
CloseHandle(hThread);
}
/////////////////////////////
//下面是接收的线程函数:
DWORD WINAPI CMFC_TCP_SERVERDlg:RecvProc(LPVOID lpParameter)
{
SOCKET sock=((RECVPARAM*)lpParameter)->sock;
SOCKET hwnd=((RECVPARAM*)lpParameter)->hwnd;
SOCKADDR_IN saddr_in = ((RECVPARAM*)lpParameter)->saddr_in;
delete lpParameter;
SOCKADDR_IN addrFrom;
int len=sizeof(SOCKADDR);
wchar_t recvBuf[200];
wchar_t tempBuf[400];
int retval;
while(1)
{
memset(&recvBuf,0,200*sizeof(wchar_t ));
retval=recvfrom(sock,(char *)recvBuf,200,NULL,(SOCKADDR *)&addrFrom,&len);
//在这里加断点,看到addrFrom里的地址就是 cccccccc,显示出来就是204.204.204.204
//请问,我的程序哪里有问题吗?
if(SOCKET_ERROR==retval)
{
break;
}
}
}
程序如上,注释里也说明了,在accept的地方看地址就能看到127.0.0.1,在recvfrom那看断点就看不到,只能看到204.204.204.204,请问我的程序哪里出了问题?大家帮指点下。