首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在winsock2中编写TransmitPackets函数?

如何在winsock2中编写TransmitPackets函数?
EN

Stack Overflow用户
提问于 2010-08-02 19:53:05
回答 2查看 1.2K关注 0票数 0

我正在用VC++(服务器)编写一个使用UDP的文件传输应用程序。我知道在winsock2中,有一些在文件传输中很有用的函数。有人能帮我吗。我也在寻找winsock2的TransmitPackets的示例应用程序,但不是gettng。请帮帮我。谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-08-02 20:08:20

http://www.mycplus.com/source-code/c-source-code/udp-sender-and-receiver/

http://www.winsocketdotnetworkprogramming.com/winsock2programming/winsock2advancedcode1e.html

http://msdn.microsoft.com/en-us/library/ms740566%28VS.85%29.aspx

以下是示例应用程序和源代码,它们将对您有所帮助。

编辑:

以下是发送器函数,它获取字符串、字符串大小、IP和端口,并通过UDP发送数据包。

代码语言:javascript
复制
int sender(char cSendBuffer[], int iBufferSize, char cIP[], int iPort)
{
    WSADATA wsaData;
    WSAStartup(MAKEWORD(2,2), &wsaData);

    char cBroadcast = '1';
    int iNumBytes = 0;

    struct sockaddr_in their_addr;
    struct hostent *he;

    SOCKET sock;
    sock = socket(AF_INET,SOCK_DGRAM,0);

    if(setsockopt(sock,SOL_SOCKET,SO_BROADCAST,&cBroadcast,sizeof(cBroadcast)) < 0)
    {
        printf("\n ----------------------------------------- \n");
        printf("Error in setting UDP option");
        printf("\n ----------------------------------------- \n");
        return 0;
    }//End if

    their_addr.sin_family      = AF_INET;
    their_addr.sin_port        = htons(iPort);
    //Target IP
    their_addr.sin_addr.s_addr = inet_addr (cIP);                       

    int iSentBytes =0;

    //Send bytes through socket
    iSentBytes = sendto(sock,cSendBuffer, iBufferSize,0,(sockaddr*)&their_addr,sizeof(their_addr));

    if( iSentBytes < 0)
    {
        printf("\n ----------------------------------------- \n");
        printf("Data Sending Error");
        printf("\n ----------------------------------------- \n");
        closesocket(sock);
        return 0;
    }//End if

    else
    {
        printf("\n ----------------------------------------- \n");
        printf("\n Data sent successfully to AT PORT:%d AND IP:%s \n",iPort,cIP);
        printf("\n ----------------------------------------- \n");
    }//End else

        closesocket(sock);
        WSACleanup();
        return 1;

}//End Function For Sending Packet

下面是UDP的接收器函数。

代码语言:javascript
复制
    int UDPReceiver( void )
    {
        char cRecievedBuffer[TRACK_BUFFER_SIZE];

        WSADATA wsaData;
        WSAStartup(MAKEWORD(2,2), &wsaData);
        SOCKET sock;
        sock = socket(AF_INET,SOCK_DGRAM,0);

        // my address information
        struct sockaddr_in  my_addr;
        // connector's address information
        struct sockaddr_in  their_addr;

        //sizeof (ANSI C function)
        int len = sizeof(struct sockaddr_in);

        my_addr.sin_family = AF_INET;
        my_addr.sin_port = htons(MYPORT);

        //Automatically fill with my IP
        my_addr.sin_addr.s_addr = INADDR_ANY;

        if (bind(sock,(sockaddr*)&my_addr, sizeof (my_addr)) < 0)
        {
            printf("\n ----------------------------------------- \n");
            printf(" Error in BINDING ");
            printf("\n ----------------------------------------- \n");
            return 0;
        }//End if

        while(recvfrom(sock,cRecievedBuffer,TRACK_BUFFER_SIZE,0,(sockaddr *)&their_addr,&len))
        {

//Your Decoder code

       }

     }
票数 0
EN

Stack Overflow用户

发布于 2010-08-03 01:48:18

这就解释了:http://msdn.microsoft.com/en-us/library/ms740566%28VS.85%29.aspx

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3387436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档