18,356
社区成员
发帖
与我相关
我的任务
分享
void CGPRS_P2PDlg::OnSock(WPARAM wParam,LPARAM lParam)
{
switch(LOWORD(lParam))
{
case FD_READ:
WSABUF wsabuf;
wsabuf.buf=new TCHAR[400];
memset(wsabuf.buf, 0, sizeof(char)* 400);//用于清除乱码显示
wsabuf.len=400;
DWORD dwRead;
DWORD dwFlag=0;
SOCKADDR_IN addrFrom;
int len=sizeof(SOCKADDR);
CString str,strip,strport;
CString strTemp;
char *strport2;
strport2="";
struct sockaddr addr,addr2;
struct sockaddr_in* addr_v4;
struct sockaddr_in* addr_v5;
// struct sockaddr_in* cMonitorInf;
int addr_len = sizeof(addr);
int addr_len2 = sizeof(addr2);
u_long ipaddr1,ipaddr2;
u_short port1,port2;
if(SOCKET_ERROR==WSARecvFrom(m_socket,&wsabuf,1,&dwRead,&dwFlag,
(SOCKADDR*)&addrFrom,&len,NULL,NULL))
{
MessageBox("接收tiao shi数据失败2!");
delete[] wsabuf.buf;
return;
}
//HOSTENT *pHost;
//pHost=gethostbyaddr((char*)&addrFrom.sin_addr.S_un.S_addr,4,AF_INET);
//-------------------------------------------------------------------------------------
int gs;
gs=getsockname(m_socket, &addr, &addr_len);
if (0 ==gs )//获取本地
{
if (addr.sa_family == AF_INET)
{
addr_v4 = (sockaddr_in*)&addr;
ipaddr1=addr_v4->sin_addr.S_un.S_addr;//调试时,发现获取的IP地址为0
port1= ntohs(addr_v4->sin_port);//调试时,获取的本地端口是对的
}
}
//----------------------------------------------------------------------------------
int gm;
gm=getpeername(m_socket, &addr2, &addr_len2);
if (0 ==gm)//获取远端,调试时发现根本没有进入函数内部,出现10057错误
{
if (addr2.sa_family == AF_INET)
{
addr_v5 = (sockaddr_in*)&addr2;
ipaddr2 = addr_v5->sin_addr.S_un.S_addr;
port2 = ntohs(addr_v5->sin_port);
}
MessageBox("执行了");
}
int warr=0;
warr=WSAGetLastError();
char warrstr[20];
_itoa(warr,warrstr,10);
strport.Format(warrstr);
SetDlgItemText(IDC_RDK1,strport); //这里显示了WSAGetLastError()的错误代码,10057,表示未连接,为什么啊?
//---------------------------------------------------------------------------------
strip.Format(inet_ntoa(addrFrom.sin_addr));
SetDlgItemText(IDC_IPADDRESS_TIAOSHI,strip);
//u_short port=addrFrom.sin_port;
char portstr[20];
_itoa(port1,portstr,10);
strport.Format(portstr);
SetDlgItemText(IDC_RDKTS,strport); //设置显示基站的ip-----------------------
str.Format("%s说 :%s",inet_ntoa(addrFrom.sin_addr),wsabuf.buf);
// str.Format("%s说 :%s",pHost->h_name,wsabuf.buf);
str+="\r\n";
GetDlgItemText(IDC_TIAOSHI,strTemp);
// GetDlgItemText(IDC_EDIT_R1,strTemp);
str+=strTemp;
SetDlgItemText(IDC_TIAOSHI,str);
// SetDlgItemText(IDC_EDIT_R1,str);
delete[] wsabuf.buf;
break;
}
}
m_socket=WSASocket(AF_INET,SOCK_DGRAM,0,NULL,0,0);
if(INVALID_SOCKET==m_socket)
{
MessageBox("创建套接字失败!");
return FALSE;
}
SOCKADDR_IN addrSock1;
addrSock1.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
addrSock1.sin_family=AF_INET;
addrSock1.sin_port=htons(6000);//6000 23317
if(SOCKET_ERROR==bind(m_socket,(SOCKADDR*)&addrSock1,sizeof(SOCKADDR)))
{
MessageBox("绑定失败!");
return FALSE;
}
if(SOCKET_ERROR==WSAAsyncSelect(m_socket,m_hWnd,UM_SOCK,FD_READ))
{
MessageBox("注册网络读取事件失败!");
return FALSE;
}