请大家帮我看看这个类,要改进的地方

bristy 2006-06-01 12:13:57
//Ttestcnhclass.h
#include <winsock.h>
#include <iostream.h>

#pragma comment(lib,"ws2_32")

class CTestcnhc
{
protected:
SOCKET m_hsocket; //套接字
sockaddr_in m_addr; //·IP
UINT m_uPort; //·端口
bool m_bWSAStartup;
public:
int res;
public:
CTestcnhc(); //¹¹Ô캯Êý;
~CTestcnhc(); //Îö¹¹º¯Êý;
public:
bool Recvdata(char* buf); //½ÓÊÕÊý¾Ý;
int connectserver(char* ip,UINT nPort);//Á¬½Ó·þÎñÆ÷;
bool Senddata(char *buf);
};


#include "stdafx.h"
#include "Ttestcnhclass.h"
#include <string.h>
#include <stdio.h>


//构造函数
CTestcnhc::CTestcnhc()
:m_hsocket(NULL),m_uPort(NULL),m_bWSAStartup(TRUE)
{

WORD wVersion;
WSADATA wsaData;
wVersion=(MAKEWORD(1,1));
if (WSAStartup(wVersion,&wsaData)==0)
{
m_bWSAStartup=TRUE;
res=0;
}
else
{
m_bWSAStartup=FALSE;
res=WSAGetLastError();
}
}

//析构函数
CTestcnhc::~CTestcnhc()
{
if(m_bWSAStartup){};
WSACleanup();
closesocket(m_hsocket);
WSACleanup();
getchar();

}

//连接服务器
int CTestcnhc::connectserver(char *ip,UINT nPort)
{
if(!m_bWSAStartup)
{
::MessageBox(NULL,"winsock ³õʼ»¯´íÎó!","´íÎóÌáʾ",NULL);
return 1;
}
if(m_hsocket!=NULL)
{
m_bWSAStartup=FALSE;
return 1;
}
if(m_hsocket==NULL)
{
m_hsocket=socket(AF_INET,SOCK_STREAM,0);
(m_hsocket!=NULL);
}
m_addr.sin_family=AF_INET;
m_addr.sin_addr.s_addr=inet_addr(ip);
m_addr.sin_port=htons(nPort);
int rec=connect(m_hsocket,(struct sockaddr*)&m_addr,sizeof(&m_addr)==SOCKET_ERROR);

if(rec==SOCKET_ERROR)
{
m_hsocket=NULL;
m_bWSAStartup=FALSE;
return 1;
}
return 0;
}

//发送数据
bool CTestcnhc::Senddata(char *buf)
{
if(!m_bWSAStartup)
{
::MessageBox(NULL,"winsock ³õʼ»¯´íÎó!","´íÎóÌáʾ",NULL);
return 1;
}
if(buf==NULL || m_hsocket==INVALID_SOCKET) return(FALSE);
char *sendp=NULL;
cin>>sendp;
//memset(buf,0,sizeof(char)*100);
sprintf(buf,"operation>>%s\r\n",sendp);
int len = strlen(buf);
send(m_hsocket,sendp,len,0);
return(TRUE);
}

//接收数据
bool CTestcnhc::Recvdata(char* buf)
{
// char buf[30];
// memset(buf,0,sizeof(char)*30);
int len = strlen(buf);
recv(m_hsocket,buf,len,0);
int n;
for(int i=0;i<30;i++)
{
if(strncmp(buf+i,"Access\r\n",10)==0)
n=1;
else
n=0;
}
if(n==0)
m_bWSAStartup=FALSE;

int count=0;
//char buf[1024];
//memset(buf,0,sizeof(char)*1024);
while(1)
{
recv(m_hsocket,buf,1024,0);
cout<<*buf<<endl;
count++;
}
return(TRUE);
}

最主要的就是在发送数据和接收数据这两个函数要改进的地方。。比如出错处理,或是可能发生的
数据错误,有没有什么好的提议,谢谢!!!
...全文
126 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
bristy 2006-06-01
  • 打赏
  • 举报
回复
谢谢楼上的各位,来者有分,迟点再结贴,这个是打算做成一个多线程同步的,呵呵,能给一点参考的网止或是代码最好
BigFanOfCpp 2006-06-01
  • 打赏
  • 举报
回复
我是过路的~我用ACE~
Qiushen 2006-06-01
  • 打赏
  • 举报
回复
如果是多线程的放,记得互斥
huhenan_linux 2006-06-01
  • 打赏
  • 举报
回复
一个接收缓冲区
一个发送缓冲去
一个函数把需要发送的数据压发送缓冲区
一个函数从接收缓冲区取数据并解析
一个专门的发送函数:从缓冲区取数据,一次发送固定大小的数据。

思路要清晰,结构要明朗!!!!
hslinux 2006-06-01
  • 打赏
  • 举报
回复
另开一个接收缓冲区,一个发送缓冲去。一个函数把需要发送的数据压发送缓冲区,一个函数从接收缓冲区取数据并解析,一个专门的发送函数:从缓冲区取数据,一次发送固定大小的数据。

18,357

社区成员

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

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