socket绑定监听等相关流程均不做详细解释了,该程序的基础是指客户端和服务器端已经进行监听并且创建了连接。
传输图片流程如下所示:
客户端代码:
//发送图片预处理指令
//读取图片预处理
char buf[1024];
FILE *fq;
CFile file;
file.Open("1.jpg",CFile::modeRead);
int len,opt = 1;
memset(buf,0,1024);
while(1)
{
len = file.Read(buf, 1024);
if(len<=0)
break;
m_ClientSocket->Send(buf,len);
}
UpdateData();
m_listSend.InsertString(-1, "发送图片一张:" + m_strMsg);
m_listSend.SetTopIndex(m_listSend.GetCount() - 1);
file.Close();
服务器端代码:
if(isImageFile)
{
char szTemp[128];
CFile file;
file.Open(_T("new1.jpg"),CFile::modeCreate|CFile::modeWrite);
int len=0,opt = 1;
while(1)
{
len = m_ServerSocket->Receive(szTemp, 128);
if(len<=0)
break;
file.SeekToEnd(); //将指针移至文件末尾进行追加
file.Write(szTemp,len);
}
//关闭文件
file.Close();
isImageFile=FALSE;
m_listReceive.InsertString(-1, "收到:图片一张"); //InsertString函数用于在指定索引添加一行,索引为-1时自动添加到末尾
m_listReceive.SetTopIndex(m_listReceive.GetCount() - 1); //自动将滚动条滚动到最大索引处。
}
else
{
char szTemp[128];
int n = m_ServerSocket->Receive(szTemp, 128); //接收客户端发来的信息
szTemp[n] = '\0';
char *cmp="image";
//解析字符串,是否为图片指令,如果是,则进入图片处理流程
if((strncmp("image",szTemp,5))==0)
isImageFile=TRUE;
else
isImageFile=FALSE;
CString strTemp;
strTemp.Format("收到:%s", szTemp);
m_listReceive.InsertString(-1, strTemp); //InsertString函数用于在指定索引添加一行,索引为-1时自动添加到末尾
m_listReceive.SetTopIndex(m_listReceive.GetCount() - 1); //自动将滚动条滚动到最大索引处。
}
亲测已经能用,不能用的请留言