您的位置:程序门 -> vc/mfc -> 网络编程



******************新手问题,请对我写的程序提供建议(最好直接指出代码的那个地方不好)********************


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


******************新手问题,请对我写的程序提供建议(最好直接指出代码的那个地方不好)********************[已结贴,结贴人:jimu8130]
发表于:2007-04-16 08:36:50 楼主
1   该代码最终是一个dll,供应用程序来调用
2   该代码是针对通过网口转串口连接的设备进行通信而编写的
3   不用多线程和异步接收发送!!
short   __declspec(dllexport)   __stdcall   connect(uint   sockport,char   *addr)
{
//initial

short   errorcode   =socket_success;
       
//create   sock
        word   wversionrequested;
wsadata   wsadata;
wversionrequested   =   makeword(1,1);
        errorcode   =   wsastartup(wversionrequested,&wsadata);
if(errorcode   !=   0){   return   socket_notinitial;}
if(lobyte(wsadata.wversion)!=1 ¦ ¦hibyte(wsadata.wversion)!=   1)
{
wsacleanup();
errorcode   =   socket_paramerr;     //系统错误   2
return   errorcode;
}

mysock   =   socket(af_inet,sock_stream,0);
sockaddr_in   addrsrv;
addrsrv.sin_addr.s_un.s_addr   =   inet_addr(addr);
addrsrv.sin_family   =   af_inet;
addrsrv.sin_port   =   htons(sockport);
short   res   =0x00;
        dword   err;
        err   =   connect(mysock,(lpsockaddr)&addrsrv,sizeof(addrsrv));
if(err   !=0)
{
res   =   socket_linkerr;   //系统错误3   连接错误

}

return   res;

}

short   __declspec(dllexport)   __stdcall   close()
{
if(mysock)
{
closesocket(mysock);
wsacleanup();

}
return   socket_success;
}

short   __declspec(dllexport)   __stdcall   senddata(char   *   pbuf,int   len)
{
int   res   =   socket_success;
if(!mysock)
{
return   socket_notinitial;   //软件错误   没有初始化  
}

res   =   send(mysock,pbuf,len,0);
if(res   !=   len){   res   =   senderror;   }//软件错误,发送异常
else
res   =   socket_success;
return   res;

}

short   __declspec(dllexport)   __stdcall   readdata(char   *   pbuf,int   len)
{
res   =recv(mysock,pbuf,len,0);
int   err   =   wsagetlasterror();
if   (res   !=   socket_error   ¦ ¦   res   > 0)
res   =   socket_success
else
        res   =   socket_failed;
return   res;  
}
发表于:2007-04-16 08:49:341楼 得分:0
单步跟踪哪里有问题吧,这样看不方便
发表于:2007-04-16 08:58:102楼 得分:0
to   cathysun118:
现在的问题不是这个程序有没有问题!!!而是针对具体的应用环境看代码哪需要改动!!!
(何况我写的这几个函数调用都很正常)
不知道你能给出什么好的建议方案么?
发表于:2007-04-16 08:59:323楼 得分:0
to   cathysun118:
    请仔细看下我的描述信息,看能不能提供好的建议
发表于:2007-04-16 09:28:074楼 得分:0
没人看了么?
发表于:2007-04-16 13:20:535楼 得分:0
你拿代码     让别人帮你debug,   你的开发效率也太低了,   我建议你买些书先好好看看吧
发表于:2007-04-16 13:37:586楼 得分:0
to   hylas:
    拜托老大,你仔细看我的描述好么!!!!!!我不是让各位看我代码哪里出问题了!!我是在问代码哪里可以在具体环境下改进!!!!这个似乎不牵涉到debug吧?这和开发效率有什么关系?这个东西很急的,买书也不一定能解决问题。
发表于:2007-04-16 13:40:207楼 得分:0
to   hylas:
    我想你也知道现在的书怎么可能会讲的那么有针对性而且说不定还有错误,买书不太现实。
发表于:2007-04-16 14:01:178楼 得分:0
有人过来see么?
发表于:2007-04-16 14:25:319楼 得分:0
提几条意见:
 1.   senddata(char   *   pbuf,int   len)   {   int   res   =   socket_success;   ...}
          如果返回类型定义为short,返回值最好也是short,虽然看上去无关紧要,但严谨是一种素质.

 2.   readdata(char   *   pbuf,int   len)   {   res   =recv(mysock,pbuf,len,0);   ...}
          如果一个变量没有类型声明,它怎么能通过编译器检查?

 3.   int   err   =   wsagetlasterror(); 如果在代码中完全没有使用到,就不要让这样的垃圾代码出现在代码中.
发表于:2007-04-16 14:38:0810楼 得分:0
to   zijida:
1   受教了,这个倒是疏忽了
2   不知道是不是csdn的问题截掉了一句代码(你给出的代码上面还有句 int   res   =   socket_success;)
3   这个是调试的时候使用的,而且个人觉得不是什么垃圾代码。

感谢你对代码提出的意见,让我认识到编程习惯的不足,不过你能结合一下这个开发的实际环境(1   该代码最终是一个dll,供应用程序来调用2   该代码是针对通过网口转串口连接的设备进行通信而编写的3   不用多线程和异步接收发送!!)来提出有针对性的建议么?
发表于:2007-04-16 14:42:5111楼 得分:30
个人感觉你的代码实际最重要的就是send和recv两个函数,但是这两个代码块你并没有进行比如缓冲,有错重新发送,探测延迟等功能,所以这段代码很脆弱
发表于:2007-04-16 16:41:1312楼 得分:20
从代码实现来看,所实现的仅仅是对socket函数的简单封装.
是针对通过网口转串口连接的设备进行通信而编写也好,或者其他应用也好,都没有问题.
但是如楼上所讲,如果要结合实际应用环境来考虑dll实现来说,还需要对传送速率,容错等方面做进一步的扩充.当然,这个扩充可以放在具体调用dll的环境里去做,所以我觉得,这个dll没有太大问题.
发表于:2007-04-16 17:56:0513楼 得分:0
to   fromocean:
    请问你说的缓冲是如何弄了?因为我们这个程序要求是同步的,发送出去后就要求立即接收
至于延迟该怎么探测了,我查了似乎延迟是在异步通信才有,同步的时候没有啊。
to   zijida:
    对传送速率扩充?有相关的资料或者代码么?
    容错这个我觉得我程序本来就简单,容错应该完善了,不知道在哪里还要扩充,能否具体点了?
    新手,不要怪我呆


快速检索

最新资讯
热门点击