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

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;
}
...全文
263 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
jimu8130 2007-04-16
  • 打赏
  • 举报
回复
没人看了么?
jimu8130 2007-04-16
  • 打赏
  • 举报
回复
to CathySun118:
请仔细看下我的描述信息,看能不能提供好的建议
jimu8130 2007-04-16
  • 打赏
  • 举报
回复
to CathySun118:
现在的问题不是这个程序有没有问题!!!而是针对具体的应用环境看代码哪需要改动!!!
(何况我写的这几个函数调用都很正常)
不知道你能给出什么好的建议方案么?
CathySun118 2007-04-16
  • 打赏
  • 举报
回复
单步跟踪哪里有问题吧,这样看不方便
jimu8130 2007-04-16
  • 打赏
  • 举报
回复
to fromocean:
请问你说的缓冲是如何弄了?因为我们这个程序要求是同步的,发送出去后就要求立即接收
至于延迟该怎么探测了,我查了似乎延迟是在异步通信才有,同步的时候没有啊。
to zijida:
对传送速率扩充?有相关的资料或者代码么?
容错这个我觉得我程序本来就简单,容错应该完善了,不知道在哪里还要扩充,能否具体点了?
新手,不要怪我呆
zijida 2007-04-16
  • 打赏
  • 举报
回复
从代码实现来看,所实现的仅仅是对SOCKET函数的简单封装.
是针对通过网口转串口连接的设备进行通信而编写也好,或者其他应用也好,都没有问题.
但是如楼上所讲,如果要结合实际应用环境来考虑DLL实现来说,还需要对传送速率,容错等方面做进一步的扩充.当然,这个扩充可以放在具体调用DLL的环境里去做,所以我觉得,这个DLL没有太大问题.
fromocean 2007-04-16
  • 打赏
  • 举报
回复
个人感觉你的代码实际最重要的就是send和recv两个函数,但是这两个代码块你并没有进行比如缓冲,有错重新发送,探测延迟等功能,所以这段代码很脆弱
jimu8130 2007-04-16
  • 打赏
  • 举报
回复
to zijida:
1 受教了,这个倒是疏忽了
2 不知道是不是csdn的问题截掉了一句代码(你给出的代码上面还有句 int res = Socket_Success;)
3 这个是调试的时候使用的,而且个人觉得不是什么垃圾代码。

感谢你对代码提出的意见,让我认识到编程习惯的不足,不过你能结合一下这个开发的实际环境(1 该代码最终是一个dll,供应用程序来调用2 该代码是针对通过网口转串口连接的设备进行通信而编写的3 不用多线程和异步接收发送!!)来提出有针对性的建议么?
zijida 2007-04-16
  • 打赏
  • 举报
回复
提几条意见:
 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(); 如果在代码中完全没有使用到,就不要让这样的垃圾代码出现在代码中.
jimu8130 2007-04-16
  • 打赏
  • 举报
回复
有人过来see么?
jimu8130 2007-04-16
  • 打赏
  • 举报
回复
to Hylas:
我想你也知道现在的书怎么可能会讲的那么有针对性而且说不定还有错误,买书不太现实。
jimu8130 2007-04-16
  • 打赏
  • 举报
回复
to Hylas:
拜托老大,你仔细看我的描述好么!!!!!!我不是让各位看我代码哪里出问题了!!我是在问代码哪里可以在具体环境下改进!!!!这个似乎不牵涉到debug吧?这和开发效率有什么关系?这个东西很急的,买书也不一定能解决问题。
Hylas 2007-04-16
  • 打赏
  • 举报
回复
你拿代码 让别人帮你debug, 你的开发效率也太低了, 我建议你买些书先好好看看吧

18,363

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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