上海妇科疾病研究所 上海女性不孕医院 上海引产医院 无痛引产痛不痛 上海人流医院 白癜风治疗医院 上海小儿脑瘫医院 上海女子医院
基于balckfin架构下的socket通信-服务器端程序设计-Blackfin-技术中心-国内专业ADI仿真器,Blackfin开发板,DSP芯片,软件算法,解决方案提供商-北京四维卓信电子有限公司
用户名: 密码:
主页 设为首页 加入收藏
      产品中心       技术中心       下载中心        社区新闻        诚聘英才       大学计划        关于我们       技术论坛
  您的当前位置:ADSP开源社区 >> 技术中心 >> Blackfin 今天是:
技术中心  
SigmaDSP
SHARC
A2B音频总线
Blackfin
ADI操作系统
ADSP-218X
TigerSAHRC
ADI DSP仿真器
产品导航
ADI DSP仿真器
SigmaDSP开发板
ADI A2B总线开发板
SHARC DSP开发板
销售网络
Blackfin  
基于balckfin架构下的socket通信-服务器端程序设计
[ 作者: ] [ 来源:ADSP开源社区 ] [ 发布时间:2011-11-22 ]

基于balckfin架构下的socket通信-服务器端程序设计,昨晚新鲜出炉啊!!!!

我们将PC机作为服务端,balckfin作为客户端。在服务器上编写TCPServer(语言为C++),编写完毕后编译、生成可执行文件TCPServer.exe。在客户端,我们先在PC机上在ucLINUX系统下写好代码,然后通过交叉编译环境GCC交叉编译,最后将其挂载到balckfin上。

发送方的工作流程为:首先初始化Winsock库,创建套接字,绑定套接字到一个本地地址,然后进入监听模式,当接收到一个连接,经过确认后,即开始发送数据,数据发送完毕后关闭套接字。

接收方的工作流程为:在新的文件传送过程建立后,读取最先收到的数据并且保存,它是待接收文件的数据字节数;然后判断可读取的数据字节数是否已经达到文件的数据字节数,如果未达到则继续等待,直到收到全部文件数据后才读取出Winsock中的数据,进行处理。

 

在balckfin上我们使用Qtopia的解决方案。Qtopia 是Trolltech 公司为采用嵌入式ucLinux 操作系统的消费电子设备而开发的综合应用平台, Qtopia包含完整的应用层、灵活的用户界面、窗口操作系统、应用程序启动程序以及开发框架。

// TCPServer.cpp文件

 

 

#include "../skts/InitSock.h"

#include <stdio.h>

#include <conio.h>

CInitSock initSock;          // 初始化Winsock库

 

int main()

{

       // 创建套接字

       SOCKET sListen = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

       if(sListen == INVALID_SOCKET)

       {

              printf("Failed socket() \n");

              return 0;

       }

      

       // 填充sockaddr_in结构

       sockaddr_in sin;

       sin.sin_family = AF_INET;

       sin.sin_port = htons(3490);

       sin.sin_addr.S_un.S_addr = inet_addr("192.168.1.196");

      

       // 绑定这个套接字到一个本地地址

       if(::bind(sListen, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR)

       {

              printf("Failed bind() \n");

              return 0;

       }

      

       // 进入监听模式

       if(::listen(sListen, 2) == SOCKET_ERROR)

       {

              printf("Failed listen() \n");

              return 0;

       }

      

       // 循环接受客户的连接请求

       sockaddr_in remoteAddr;

       int nAddrLen = sizeof(remoteAddr);

       SOCKET sClient;

       char szText[256] = "TCP Server Demo!";

       while(TRUE)

       {

              // 接受一个新连接

              sClient = ::accept(sListen, (SOCKADDR*)&remoteAddr, &nAddrLen);

              if(sClient == INVALID_SOCKET)

              {

                     printf("Failed accept()");

                     continue;

              }

             

              printf(" 接受到一个连接:%s \r\n", inet_ntoa(remoteAddr.sin_addr));

 

              int i=0;

              // 向客户端发送数据

              while (TRUE)

              {

                     scanf("%s",szText);

              ::send(sClient, szText, strlen(szText), 0);

              printf("%d send:%s\n",++i,szText);

             

              if (szText[0]=='q')

                     break;

              }

              // 关闭同客户端的连接

              ::closesocket(sClient);

//            getch();

//            break;

       }

             

       // 关闭监听套节字

       ::closesocket(sListen);

 

       return 0;

}

一晚上反复调试,其中建立连接,交换信息是关键,一晚上的成绩 ,明天开始客户端程序的设计了,呵呵!!!

联系我们 | 关于我们 | 免责声明 | 诚征英才 | 友情链接
Copyright 2019 All rights reserved  本网页版权属Open ADSP所有
北京海淀区中关村大街32号新中发市场3659 邮编100100
电话 18611096839 
粤ICP备14035876号-1