我写的一个非面向连接的本地Socket程序,用于向远端发出请求,并从远端接收发来的连续包。
(1)关键代码如下:
if(sendto(sSessionSock,(char*)m_cpData,packetLen,0,
(struct sockaddr*)&s_remote_addr,sizeof(s_remote_addr))==SOCKET_ERROR)
{
MessageBox(NULL,"Send SOL_Command Failure!",
"Error",MB_OK|MB_ICONERROR);
return 1;
}
while(connection)
{
if(recvfrom(sSessionSock,(char*)recv_buf,100,0,
(struct sockaddr*)&s_remote_addr,&length)==SOCKET_ERROR)
{
MessageBox(NULL,"Receive SOL_Response Packets Failure!",
"Error",MB_OK|MB_ICONERROR);
return 1;
}
printf("\nReceive SOL Packet %d As Follows:\n",connection++);
for(i=0;i<100;i++) printf("%5x",recv_buf[i]);
memset(recv_buf,0x00,100);
}
(2)出现的现象:
收到远端发来的第一个包以后,收不到其他的包。但本地Sniffer能捕获到发来的连续不断的包。(3)请高手多给意见。
(1)关键代码如下:
if(sendto(sSessionSock,(char*)m_cpData,packetLen,0,
(struct sockaddr*)&s_remote_addr,sizeof(s_remote_addr))==SOCKET_ERROR)
{
MessageBox(NULL,"Send SOL_Command Failure!",
"Error",MB_OK|MB_ICONERROR);
return 1;
}
while(connection)
{
if(recvfrom(sSessionSock,(char*)recv_buf,100,0,
(struct sockaddr*)&s_remote_addr,&length)==SOCKET_ERROR)
{
MessageBox(NULL,"Receive SOL_Response Packets Failure!",
"Error",MB_OK|MB_ICONERROR);
return 1;
}
printf("\nReceive SOL Packet %d As Follows:\n",connection++);
for(i=0;i<100;i++) printf("%5x",recv_buf[i]);
memset(recv_buf,0x00,100);
}
(2)出现的现象:
收到远端发来的第一个包以后,收不到其他的包。但本地Sniffer能捕获到发来的连续不断的包。(3)请高手多给意见。
解决方案 »
- 请问下大家如何OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult执行
- CMFCToolBar设置图像
- 求教!逗号间隔的数据字符串转换为浮点型数据并存入数组中?
- 设计一个基于对话框的程序可以查找电脑上的图片并显示出来
- c++如何得到当前鼠标在哪个对话框上
- 使用完成端口异步发送数据的问题,请各位指教
- PROGUID是什么东西,如何查询与设置?
- IE 图形显示
- vc Atl编写的word工具栏按钮插件(dll文件)为何加载失败?
- SetButtonInfo,总报错PButton=null ?
- 程序结束的时候出现“应用程序错误”
- 学习串并行口通信应把重点放在什么地方???
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;
int i;
WSADATA wsd;
CString csTmp;
SOCKET sSessionSock;
sockaddr_in addr_to;
unsigned char *m_cpData;
int ret,timeout = 100;
int connection=1;
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
// TODO: change error code to suit your needs
cerr << _T("Fatal Error: MFC initialization failed") << endl;
nRetCode = 1;
}
else
{
// TODO: code your application's behavior here.
CString strHello;
strHello.LoadString(IDS_HELLO);
cout << (LPCTSTR)strHello << endl;
} if(WSAStartup(MAKEWORD(2,2),&wsd)!=0)
{
MessageBox(NULL,"Windows Socket Start Failure!","SOCKET Error",
MB_OK|MB_ICONERROR);
return 1;
} //Create Session Socket,If failure,return error code.
sSessionSock = socket(AF_INET,SOCK_DGRAM,0);
if(sSessionSock == INVALID_SOCKET)
{
csTmp.Format("%d",WSAGetLastError());
MessageBox(NULL,"Create Socket Error! Code:"+csTmp,"Socket Error",
MB_OK|MB_ICONERROR);
return 1;
}
//set send timeout control
ret = setsockopt(sSessionSock,SOL_SOCKET,SO_SNDTIMEO,(char*)&timeout,
sizeof(timeout));
if(ret == SOCKET_ERROR)
{
csTmp.Format("%d",WSAGetLastError());
MessageBox(NULL,"Setting Socket Attribute Error!","Error",
MB_OK|MB_ICONERROR);
return 1;
}
addr_to.sin_family = AF_INET;
addr_to.sin_port = htons((unsigned short)5050);
addr_to.sin_addr.s_addr = inet_addr("10.130.2.36");
m_cpData = (unsigned char*)malloc(60*sizeof(char));
while(connection)
{
memset(m_cpData,connection,60);
ret = sendto(sSessionSock,(char*)m_cpData,60,0,(struct sockaddr*)&addr_to,
sizeof(addr_to));
connection++;
printf("\n\nSend out:\n");
for(i=0;i<60;i++)
printf("%5d",m_cpData[i]);
}
return nRetCode;
}
(2)接收程序:
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;
int i;
int length;
WSADATA wsd;
CString csTmp;
SOCKET Sock;
sockaddr_in from,local;
unsigned char *m_cpData;
int ret,timeout = 160;
int connection=1;
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
// TODO: change error code to suit your needs
cerr << _T("Fatal Error: MFC initialization failed") << endl;
nRetCode = 1;
}
else
{
// TODO: code your application's behavior here.
CString strHello;
strHello.LoadString(IDS_HELLO);
cout << (LPCTSTR)strHello << endl;
} if(WSAStartup(MAKEWORD(2,2),&wsd)!=0)
{
MessageBox(NULL,"Windows Socket Start Failure!","SOCKET Error",
MB_OK|MB_ICONERROR);
return 1;
} //Create Session Socket,If failure,return error code.
Sock = socket(AF_INET,SOCK_DGRAM,0);
if(Sock == INVALID_SOCKET)
{
csTmp.Format("%d",WSAGetLastError());
MessageBox(NULL,"Create Socket Error! Code:"+csTmp,"Socket Error",
MB_OK|MB_ICONERROR);
return 1;
} //-------------------------NOTICE!!-----------------------------------
//................SET RECEIVE TIME-OUT CONTROL.......................
/* ret = setsockopt(Sock,SOL_SOCKET,SO_RCVTIMEO,(char*)&timeout,sizeof(timeout));
if(ret == SOCKET_ERROR)
{
csTmp.Format("%d",WSAGetLastError());
MessageBox(NULL,"Setting Socket Attribute Error!","Error",
MB_OK|MB_ICONERROR);
return 1;
}
*/
//Initialize & Bind Local Address from.sin_family = AF_INET;
from.sin_port = htons((unsigned short)5050);
from.sin_addr.s_addr = inet_addr("10.130.2.36"); local.sin_family = AF_INET;
local.sin_addr.s_addr = (INADDR_ANY);
local.sin_port = htons((unsigned short)5050); ret = bind(Sock,(struct sockaddr*)&local,sizeof(local));
if(ret == SOCKET_ERROR)
{
csTmp.Format("%d",WSAGetLastError());
MessageBox(NULL,"Bind Local Address/Port Failure! Code:"+csTmp,"Error",
MB_OK|MB_ICONERROR);
return 1;
}
m_cpData = (unsigned char*)malloc(60*sizeof(char));
memset(m_cpData,0x00,60);
length=sizeof(from);
while(connection)
{
ret = recvfrom(Sock,(char*)m_cpData,60,0,(struct sockaddr*)&from,
&length);
if(ret==SOCKET_ERROR)
{
printf("\nBig Failure!\n");
break; }
printf("\n\nReceive:\n");
for(i=0;i<60;i++)
printf("%5d",m_cpData[i]);
}
return nRetCode;
}