Flex与C++ Socket短连接示例

来源:互联网 发布:血色衣冠武将数据 编辑:程序博客网 时间:2024/05/14 14:34

下面用C++基于win32 socket library实现一个socket 服务端:

WORD verWord;WSADATA wsaData;SOCKET svrSock, clientSock;SOCKADDR_IN svrAddr, clientAddr;int err;short port = 2046;int addrLen  = sizeof(SOCKADDR);verWord = MAKEWORD(2, 0);if ( (err = WSAStartup(verWord, &wsaData)) != 0){cout << "startup err" << endl;return 0;}if ( LOBYTE(verWord) != 2 || HIBYTE(verWord) != 0 ){WSACleanup();cout << "version err" << endl;return 0;}svrSock = socket(AF_INET, SOCK_STREAM, 0);//SOCK_STREAM stand for tcp, AF_INET used in winsvrAddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);//使用任意IP地址,eg 127.0.0.1,INADDR_ANY may be 0x0x00000000svrAddr.sin_family = AF_INET;svrAddr.sin_port = htons(port);//htons转换端口bind(svrSock, (SOCKADDR *)&svrAddr, sizeof(SOCKADDR));//绑定地址&端口供客户端连接listen(svrSock, 5);//开启服务,准备接受客户端连接,backlog 5表示最大处理连接数printf("server %d is listening.../n", port);while(true){char recvBuf[1024];clientSock = accept(svrSock, (SOCKADDR *)&clientAddr, &addrLen);char *cip = inet_ntoa(clientAddr.sin_addr);printf("accept client connection from %s /n", cip);int bytes;if ( (bytes = recv(clientSock, recvBuf, sizeof(recvBuf), 0)) == SOCKET_ERROR){cout << "receive error" << endl;exit(-1);}recvBuf[bytes] = '/0';printf("receive message :%s/n", recvBuf);if (send(clientSock, recvBuf, strlen(recvBuf)+1, 0) == SOCKET_ERROR){cout << "send error" << endl;exit(-1);}printf("message sended to %s :%s /n", recvBuf, cip);closesocket(clientSock);//关闭客户端socket连接}

下面使用Flex Gumbo实现一个简单的socket连接客户端:

<fx:Script><![CDATA[import mx.events.FlexEvent;[Bindable]private var receivedData :String = '';private var socket :Socket;protected function sendBtn_clickHandler(event:MouseEvent):void{// TODO Auto-generated method stubsocket.connect("127.0.0.1", 2046);}private function socketConnectHandler(e :Event) :void{trace('connected to server');socket.writeMultiByte(txt.text, "utf-8");}private function socketDataHandler(e :ProgressEvent) :void{trace("received data from server", socket.connected);receivedData += socket.readMultiByte(socket.bytesAvailable, 'utf-8');}protected function application1_creationCompleteHandler(event:FlexEvent):void{// TODO Auto-generated method stubsocket = new Socket();socket.addEventListener(Event.CONNECT, socketConnectHandler);socket.addEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler);}]]></fx:Script><fx:Declarations><!-- 将非可视元素(例如服务、值对象)放在此处 --></fx:Declarations><s:TextInput id="txt" text="hi,sban" /><s:Button label="send" id="sendBtn" click="sendBtn_clickHandler(event)" /><s:Label text="received from server : {receivedData}" />
原创粉丝点击