如何用socket api写UDP协议通信的程序。。。 hoho,即使使用winsocket api,也还是使用别人封装的。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这里找来的VC++的UDP,参考一下==============================================6.2 利用WinSock进行无连接的通信WinSock提供了对UDP(用户数据报协议)的支持,通过UDP协议我们可以向指定IP地址的主机发送数据,同时也可以从指定IP地址的主机接收数据,发送和接收方处于相同的地位没有主次之分。利用CSocket操纵无连接的数据发送很简单,首先生成一个本地套接口(需要指明SOCK_DGRAM标记),然后利用 int CAsyncSocket::SendTo( const void* lpBuf, int nBufLen, UINT nHostPort, LPCTSTR lpszHostAddress = NULL, int nFlags = 0 )发送数据, int CAsyncSocket::ReceiveFrom( void* lpBuf, int nBufLen, CString& rSocketAddress, UINT& rSocketPort, int nFlags = 0 )接收数据。函数调用顺序如图。利用UDP协议发送和接收都可以是双向的,就是说任何一个主机都可以发送和接收数据。但是UDP协议是无连接的,所以发送的数据不一定能被接收,此外接收的顺序也有可能与发送顺序不一致。下面是相关代码: /*发送方在端口6800上向接收方端口6801发送数据*///发送方代码:BOOL CMy62_s1_clientDlg::OnInitDialog(){ CDialog::OnInitDialog(); //创建本地套接口 m_sockSend.Create(6800,SOCK_DGRAM,NULL); //绑定本地套接口 m_sockSend.Bind(6800,"127.0.0.1"); //创建一个定时器定时发送 SetTimer(1,3000,NULL);...}void CMy62_s1_clientDlg::OnTimer(UINT nIDEvent) { static iIndex=0; char szSend[20]; sprintf(szSend,"%010d",iIndex++); //发送UDP数据 int iSend= m_sockSend.SendTo(szSend,10,6801,"127.0.0.1",0); TRACE("sent %d byte\n",iSend);...}//接收方代码BOOL CMy62_s1_serverDlg::OnInitDialog(){ CDialog::OnInitDialog(); //创建本地套接口 m_sockRecv.Create(6801,SOCK_DGRAM,"127.0.0.1"); //绑定本地套接口 m_sockRecv.Bind(6801,"127.0.0.1"); //创建一个定时器定时读取 SetTimer(1,3000,NULL);...}void CMy62_s1_serverDlg::OnTimer(UINT nIDEvent) { char szRecv[20]; CString szIP("127.0.0.1"); UINT uPort=6800; //接收UDP数据 int iRecv =m_sockRecv.ReceiveFrom(szRecv,10,szIP,uPort,0); TRACE("received %d byte\n",iRecv);...}/*接收方采用同步读取数据的方式,所以没有读到数据函数调用将不会返回*/下载例子代码,62_s1_client工程为发送方,62_s1_server工程为接收方。 《Visual C++开发指南》 闻怡洋/文 你用Delphi,为什么?不就是VCL吗? 因为我想用Delphi使用API写程序呵呵。BCB(:)) :呵呵。。我想用API。你那是mfc。。 Nicrosoft你不是希望自己搞定OS吧? cxgrid的离开事件问题 如何在一个button 事件中判断是否已经选取dbgrid中的任何一条记录,如果没有选择则提示错误信息? 急啊~!在线求解决方法,水晶报表问题. 100分求:关于Treeview的小问题 财务软件应该有什么功能呀??请指教? 关于数据库刷新的问题... 请问如何把Memo内的内容存入到一个文本文件中,请给出源码 關于分布式多層架構的問題--------:)> 不用TFindDialog能否实现? delphi如何实现数据分页显示? 关于数据库的简单问题!请教! 请问怎么在运行时建立一个表,是不是用sql语言就行了,能否详细一点
==============================================
6.2 利用WinSock进行无连接的通信
WinSock提供了对UDP(用户数据报协议)的支持,通过UDP协议我们可以向指定IP地址的主机发送数据,同时也可以从指定IP地址的主机接收数据,发送和接收方处于相同的地位没有主次之分。利用CSocket操纵无连接的数据发送很简单,首先生成一个本地套接口(需要指明SOCK_DGRAM标记),然后利用
int CAsyncSocket::SendTo( const void* lpBuf, int nBufLen, UINT nHostPort, LPCTSTR lpszHostAddress = NULL, int nFlags = 0 )发送数据,
int CAsyncSocket::ReceiveFrom( void* lpBuf, int nBufLen, CString& rSocketAddress, UINT& rSocketPort, int nFlags = 0 )接收数据。函数调用顺序如图。利用UDP协议发送和接收都可以是双向的,就是说任何一个主机都可以发送和接收数据。但是UDP协议是无连接的,所以发送的数据不一定能被接收,此外接收的顺序也有可能与发送顺序不一致。下面是相关代码: /*
发送方在端口6800上向接收方端口6801发送数据
*/
//发送方代码:
BOOL CMy62_s1_clientDlg::OnInitDialog()
{
CDialog::OnInitDialog(); //创建本地套接口
m_sockSend.Create(6800,SOCK_DGRAM,NULL);
//绑定本地套接口
m_sockSend.Bind(6800,"127.0.0.1");
//创建一个定时器定时发送
SetTimer(1,3000,NULL);
...
}
void CMy62_s1_clientDlg::OnTimer(UINT nIDEvent)
{
static iIndex=0;
char szSend[20];
sprintf(szSend,"%010d",iIndex++);
//发送UDP数据
int iSend= m_sockSend.SendTo(szSend,10,6801,"127.0.0.1",0);
TRACE("sent %d byte\n",iSend);
...
}//接收方代码
BOOL CMy62_s1_serverDlg::OnInitDialog()
{
CDialog::OnInitDialog(); //创建本地套接口
m_sockRecv.Create(6801,SOCK_DGRAM,"127.0.0.1");
//绑定本地套接口
m_sockRecv.Bind(6801,"127.0.0.1");
//创建一个定时器定时读取
SetTimer(1,3000,NULL);
...
}
void CMy62_s1_serverDlg::OnTimer(UINT nIDEvent)
{
char szRecv[20];
CString szIP("127.0.0.1");
UINT uPort=6800;
//接收UDP数据
int iRecv =m_sockRecv.ReceiveFrom(szRecv,10,szIP,uPort,0);
TRACE("received %d byte\n",iRecv);
...
}
/*
接收方采用同步读取数据的方式,所以没有读到数据函数调用将不会返回
*/下载例子代码,62_s1_client工程为发送方,62_s1_server工程为接收方。
《Visual C++开发指南》 闻怡洋/文
BCB(:)) :呵呵。。我想用API。你那是mfc。。