因为matlab中用到,不会用matlab的udp功能问各位高手可不可以在Dlephi做一个Dll,通过调用其中函数实现udp方式传输数据,初步打算用Indy
各位有没有现成例子可参考谢过了

解决方案 »

  1.   

    用VC搞定了
    原来很简单啊:
    // udpdll.cpp : 定义 DLL 的初始化例程。
    //
    #include "stdafx.h"
    #include "udpdll.h"#ifdef _DEBUG
    #define new DEBUG_NEW
    #endif//
    //TODO: 如果此 DLL 相对于 MFC DLL 是动态链接的,BEGIN_MESSAGE_MAP(CudpdllApp, CWinApp)
    END_MESSAGE_MAP()
    // CudpdllApp 构造CudpdllApp::CudpdllApp()
    {
    // TODO: 在此处添加构造代码,
    // 将所有重要的初始化放置在 InitInstance 中
    }
    // 唯一的一个 CudpdllApp 对象CudpdllApp theApp;
    // CudpdllApp 初始化BOOL CudpdllApp::InitInstance()
    {
    CWinApp::InitInstance();
         
    return TRUE;
    }
    //外部接口函数
    int CudpdllApp::SendUdpMessage(char *str,int num) 
    {  
     WORD wVersionRequested;
     WSADATA wsaData;
     int err;
     wVersionRequested = MAKEWORD( 1, 1 );
     err = WSAStartup( wVersionRequested, &wsaData );
     if ( err != 0 ) 
     {
      return FALSE;
     }
     if ( LOBYTE( wsaData.wVersion ) != 1 ||
            HIBYTE( wsaData.wVersion ) != 1 ) 
     {
      WSACleanup( );
      return FALSE; 
     }
    SOCKET  sockClient = socket( AF_INET , SOCK_DGRAM , 0 ) ;
    SOCKADDR_IN   addrSrv;
     addrSrv.sin_addr.S_un.S_addr = inet_addr("192.168.1.255") ;
     addrSrv.sin_family = AF_INET ;
     addrSrv.sin_port = htons(5000) ;
     int len = sizeof(SOCKADDR);
     while (1)
     {  sendto( sockClient ,str ,num , 0 , 
        (SOCKADDR*)&addrSrv, len ) ;
      Sleep(2000); }
     closesocket(sockClient) ;
     WSACleanup() ; return 0;
    }