用C++与Flex(web)进行Socket通信----成功2

C++代码:(没加注释)

// testsocket.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"



#include  <winsock2.h>
#include <stdio.h>
#include <windows.h>
#include <iostream>

using namespace std;

#pragma comment(lib,"ws2_32.lib")

void main()
{
    WORD wVersionRequested;
    WSADATA wsaData;
    int err;
    short port=8080;

    wVersionRequested = MAKEWORD( 1, 1 );

    err = WSAStartup( wVersionRequested, &wsaData );
    if ( err != 0 )
    {
        return;
    }

    if ( LOBYTE( wsaData.wVersion ) != 1 || HIBYTE( wsaData.wVersion ) != 1 )
    {
        WSACleanup( );
        return;
    }

    SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);
    SOCKET sockConn;
    SOCKADDR_IN addrSrv;

    addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
    addrSrv.sin_family=AF_INET;
    addrSrv.sin_port=htons(port);

    bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
    listen(sockSrv,5);

    printf("Server %d is listening....../n",port);
    SOCKADDR_IN addrClient;
    int len=sizeof(SOCKADDR);

    char buf[4096];
    char rbuf[4096]="test";
    string sbuf="<cross-domain-policy>";
    sbuf+=    "<allow-access-from domain=/"*/" to-ports=/"*/"/>";
    sbuf+=    "</cross-domain-policy>";
   
    while(1)
    {

       
        sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);
        printf("Accept connection from %s/n",inet_ntoa(addrClient.sin_addr));

       
        int bytes;
        if((bytes=recv(sockConn,buf,sizeof(buf),0))==SOCKET_ERROR)
        {
            printf("接收数据失败!/n");
            exit(-1);
        }

        buf[bytes]='/0';

        printf("Message from %s: %s/n",inet_ntoa(addrClient.sin_addr),buf);

        if (0 == strcmp(buf,"<policy-file-request/>")) 
        { 
            for( int i=0;i<sbuf.size()+1;i++  )
            {
            rbuf[i]=sbuf[i];
            }
             
             if(send(sockConn,rbuf,strlen(rbuf)+1,0)==SOCKET_ERROR) 
             { 
                 printf("发送数据失败!"); 
                 exit(-1); 
             } 
             printf("Message to %s: %s/n",inet_ntoa(addrClient.sin_addr),rbuf); 
        } 
        else 
        { 


        string sbuf;
        std:string:sbuf=buf;
        sbuf+=rbuf;
        char *pbuf=rbuf;
        pbuf=strdup ( sbuf.c_str());
        int bufnum;
        bufnum=sbuf.length();
        for(int i=0;i<bytes;i++)
        {
            rbuf[i]=buf[i];
        }
        rbuf[bytes]='o';
        rbuf[bytes+1]='k';
        rbuf[bytes+2]='/0';
        if(send(sockConn,rbuf,strlen(rbuf)+1,0)==SOCKET_ERROR)
        {
             printf("发送数据失败!");
             exit(-1);
        }

        printf("Message to %s: %s/n",inet_ntoa(addrClient.sin_addr),rbuf);
 
        free(pbuf);
       
    }

    }
            closesocket(sockConn);
}

 

 

Flex端代码:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" fontSize="12" creationComplete="initApp()" width="369" height="326" backgroundColor="#0F0E0E">
    <mx:Script>

        <![CDATA[
           
            import flash.net.Socket;
           
            private var socket:Socket;
           
            private function initApp():void
               
            {
               
               
               
            }
           
           
            private function StartTest():void
               
            {                        
                socket = new Socket("10.45.20.23",8080);    
               
                socket.addEventListener(Event.CONNECT, connectHandler);
               
                socket.addEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler);
               
            }
           
            private function CloseTest():void
               
            {  
               
                if(socket!=null && socket.connected)
                   
                {
                   
                    trace("socket.connected:"+socket.connected);
                   
                    socket.close();
                   
                    trace("socket.connected:"+socket.connected);
                   
                }
               
            }
           
            private function connectHandler(event:Event):void
               
            {
               
                trace("connectHandler: " + event);
               
                socket.writeMultiByte(SendStr.text,"GB2312");              
               
                socket.flush();
               
            }
           
            private function socketDataHandler(event:ProgressEvent):void
               
            {
               
                trace("socketDataHandler: " + event);
               
                var str:String=socket.readMultiByte(socket.bytesAvailable,"GB2312");
               
                ReceiveStr.text = str;
               
            }
           
        ]]>
       
    </mx:Script>
   
   
    <mx:Text text="发送" y="91" x="14" fontWeight="bold" color="#ffffff"/>
   
    <mx:TextArea id="ReceiveStr" x="53" y="138"/>
   
    <mx:Text text="接收" y="161" x="14" fontWeight="bold" color="#ffffff"/>
   
    <mx:TextArea id="SendStr" y="68" x="53"/>      
   
    <mx:Button label="Start" click="StartTest()" x="53" y="190"/>
   
    <mx:Button label="Close" click="CloseTest()" x="131" y="190"/>
    <mx:Text x="52" y="32" text="web端socket测试例子" color="#F7EFEF" fontWeight="bold"/>
</mx:Application>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值