菜鸟请教VxWorks下socket通信问题

llpysyy 2007-04-18 03:19:55
有一块ARM7下的目标板,VxWorks操作系统移植完毕。想用PC机和目标板用socket通信,有相应的程序tcpserver、tcpclinet。请问应该怎么样操作?或者推荐点资料,谢啦
...全文
1145 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
myruru2005 2008-01-30
  • 打赏
  • 举报
回复
可以看看帮助里de例子,当然你要是想了解网络tcp通信的原理,你就要看看更多的书了,我最近在用UDP里的东西,唉。
ztlilac 2008-01-28
  • 打赏
  • 举报
回复
网络编程 不论Windows 还是linux 还是Vxworks 都是源自BSD 4.4 , 随便找本Socket 编程的书,就够了,有那么复杂么
justthis 2008-01-05
  • 打赏
  • 举报
回复
找个问题我刚刚做过,首先你是一台PC机,一台目标机,PC机是WINDOWS,目标机是VXWORKS,两端的socket有一些不一样,但是大致想同,VXWORKS下的socket很多书上有例子,主要说下WINDOWS下的不同之处。

首先,windows下要先将一个库包含进去,忘记是什么库了,上网可以搜到
然后,要初始化一下,后边的大致和vxworks差不多了。

具体你可以看下好像最新的MSDN里有个例子,具体你可以查阅一下。
wangjing20081996 2008-01-04
  • 打赏
  • 举报
回复
有与Windows通信的原代码!这是服务器端的,TCP 方式
#include "VxWorks.h"
#include "taskLib.h"
#include "sockLib.h"
#include "inetLib.h"
#include "ioLib.h"
#include "logLib.h"
#include "string.h"
#include "stdio.h"
#include "netinet\\tcp.h"
#include "vxSvr.h"



int listenSkt;
int commuSkt;
int flagNetInit=NET_INIT_NULL;
STATUS netInit();
STATUS netRecv();
STATUS netSend(char *pBuff);
void netCloseAll();



STATUS netInit()
{
struct sockaddr_in serverAddr;
struct sockaddr_in clientAddr;
int sockAddrSize;
int i;
char optval=1;

if(flagNetInit==NET_INIT_COMMUSKT)
{
logMsg("netinit:server has a already been initialized\n",0,0,0,0,0,0);
return(OK);
}
else if(flagNetInit==NET_INIT_NULL)
{
if((listenSkt=socket(AF_INET,SOCK_STREAM,0))==ERROR)
{
logMsg("netinit:can not open listen socket\n",0,0,0,0,0,0);
return(ERROR);
}

sockAddrSize=sizeof(struct sockaddr_in);
bzero((char*)&serverAddr,sockAddrSize);
serverAddr.sin_family=AF_INET;
serverAddr.sin_len=(u_char)sockAddrSize;
serverAddr.sin_port=htons(LOCAL_SERVER_PORT);
serverAddr.sin_addr.s_addr=htonl(INADDR_ANY);

if(bind(listenSkt,(struct sockaddr*) &serverAddr,sockAddrSize)==ERROR)
{
logMsg("netinit:unable to bind to port %d\n",LOCAL_SERVER_PORT,0,0,0,0,0);
close(listenSkt);
return(ERROR);
}

/*else*/
logMsg("netinit:successfully bind to prot\n",LOCAL_SERVER_PORT,0,0,0,0,0);

if(listen(listenSkt,1)==ERROR)
{
logMsg("netInit:can not listen to listen tolisten socker\n",0,0,0,0,0,0);
close(listenSkt);
return(ERROR);
}
else
{
flagNetInit=NET_INIT_LISTENSKT;
}

}


commuSkt=accept(listenSkt,(struct sockaddr*)(&clientAddr),&sockAddrSize);


if(commuSkt==ERROR)
{
logMsg("netinit:can not accept command socker\n",0,0,0,0,0,0);
close(listenSkt);
return(ERROR);
}
else
{
logMsg("netInit:net Init finished\n",0,0,0,0,0,0);
setsockopt(commuSkt,IPPROTO_TCP,TCP_NODELAY,&optval,sizeof(optval));
if(taskNameToId(TNAME_RECV)==ERROR)
{
taskSpawn(TNAME_RECV,TPRI_CMDRECV,0,USER_STACK_SIZE,(FUNCPTR)netRecv,0,0,0,0,0,0,0,0,0,0);
}

}
flagNetInit=NET_INIT_COMMUSKT;
return(OK);
}
STATUS netSend(char *pBuff)
{
int buffLen;
if((pBuff!=NULL)&&(flagNetInit==NET_INIT_COMMUSKT))
{
buffLen=strlen(pBuff);
if(buffLen>=NET_MSG_MAX_SIZE)
{

buffLen=NET_MSG_MAX_SIZE;
pBuff[buffLen-1]=0;
}
if(send(commuSkt,pBuff,buffLen,0)==ERROR)
{
logMsg("netsend:error in sending buff to client\n",0,0,0,0,0,0);
netCloseAll();
return(ERROR);
}
return(OK);
}
else
{
if(flagNetInit==NET_INIT_NULL)
logMsg("netsend:server has not been initialized\n",0,0,0,0,0,0);
else if (flagNetInit==NET_INIT_LISTENSKT)
{
logMsg("netSend:no connection created yet\n",0,0,0,0,0,0);
logMsg("netSend:please connect to vxworks server with pc programm\n",0,0,0,0,0,0);
}
else
{
logMsg("netSend:you message is invalid\n",0,0,0,0,0,0);
}
return(ERROR);
}

}



STATUS netRecv()
{
char pBuff[NET_MSG_MAX_SIZE+1];
int recvLen;
while(flagNetInit==NET_INIT_COMMUSKT)
{
recvLen=recv(commuSkt,pBuff,NET_MSG_MAX_SIZE,0);
if((recvLen!=ERROR)&&(recvLen!=0))
{
pBuff[recvLen]=0;
logMsg("netRecv:received message from client:\n%s\n",(int)pBuff,0,0,0,0,0);
}
else
{
netCloseAll();
return(ERROR);
}
}
logMsg("netRecv:net connection is shut down,quit\n",0,0,0,0,0,0);
return(OK);
}


void netCloseAll()
{
int taskId;
taskId=taskNameToId(TNAME_RECV);
if((taskId!=taskIdSelf()&&taskId!=ERROR))
{
taskDelete(taskId);
}
if(flagNetInit==NET_INIT_COMMUSKT)
{
close(commuSkt);
close(listenSkt);
}
else if (flagNetInit==NET_INIT_LISTENSKT)
{
close(listenSkt);
}
flagNetInit=NET_INIT_NULL;
logMsg("netCloseAll:net connection shut down\n",0,0,0,0,0,0);
}
以上是调试通过的
另外VX下支持一种ZBUF方式,速度很快,可以试试,我也有代码!
fallalex 2007-12-21
  • 打赏
  • 举报
回复
参照编程手册,很详细的,不过我用的UDP,不难
baoweihui 2007-12-11
  • 打赏
  • 举报
回复
Vxworks的socket编程接口和Windows的基本是一样的
bestboy2008 2007-12-11
  • 打赏
  • 举报
回复
是一样的,其实vxworks有现成的socket通信代码,你只要改一下就行 ,很简单的!
lzt1112001 2007-11-13
  • 打赏
  • 举报
回复
我也想知道

2,179

社区成员

发帖
与我相关
我的任务
社区描述
xworks是美国 Wind River System 公司( 以下简称风河公司 ,即 WRS 公司)推出的一个实时操作系统。
社区管理员
  • VxWorks开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧