IPServer的实现

1、建立一个MFC工程

2、添加static Text

3、添加button

4、双击button开始写自己的代码。

在这里只写出通道一的实现。button事件代码如下:

  CFileDialog FDialg(TRUE, NULL, NULL, OFN_HIDEREADONLY| OFN_OVERWRITEPROMPT,
"JPEG files (*.jpg)|*.JPG|BMP files(*.bmp)|*.BMP|all files (*.*)|*.*||",NULL);
if(FDialg.DoModal() == IDOK )
{

m_strFileName
=FDialg.GetFileName();
strcpy(OpenFileAdress1, (
char*)(LPCTSTR)(FDialg.GetPathName()) );//获得文件名并保存
count++;
if(count==1)
{
//AfxMessageBox("第一次");
strcpy(LastOpenFileAdress, (char*)(LPCTSTR)(FDialg.GetPathName()) );

}
if(count>=2)
{
if(!strcmp(LastOpenFileAdress,OpenFileAdress1))
{
strcpy(LastOpenFileAdress, (
char*)(LPCTSTR)(FDialg.GetPathName()) );
AfxMessageBox(
"正在发送");
return;
}
else
{
//AfxMessageBox("关闭之前线程");
strcpy(LastOpenFileAdress, (char*)(LPCTSTR)(FDialg.GetPathName()));

if(0==TerminateThread(hThrd2->m_hThread,0))
{
AfxMessageBox(
"关闭线程失败");
return;
}
}
}
}
else
AfxMessageBox(
"没有选择文件");

m_pPicture
->Load(OpenFileAdress1);//读取图片
CRect rect;
CWnd
*pWnd = GetDlgItem(IDC_PlayWnd_Ch1);//获得变量名为IDC_PictureShow的句柄
pWnd->GetClientRect(&rect);//获取当前对话框的矩形,不过此时的矩形是倒着的,需要倒置下
CDC *pDC = pWnd->GetDC();//获得显示图像的设备环境
CRect rc(rect.top,rect.bottom,rect.right,rect.left);//倒置获得的矩形
m_pPicture->Render(pDC,rc,NULL,rc);//将图像显示出来
pWnd->Invalidate();

//调用发送线程
hThrd2=AfxBeginThread(SendFile, this);
*******
*******************
//SendFile线程代码如下:
UINT SendFile(void *p/*窗口指针*/)
{
WSADATA wsaData;
int error=WSAStartup(MAKEWORD(2,2),&wsaData);
if(error!=0)
{
AfxMessageBox("初始化DLL失败!");
return -1;
}
if(LOBYTE(wsaData.wVersion)!=2 || HIBYTE(wsaData.wVersion)!=2)
{
WSACleanup();
AfxMessageBox("版本出错!");
return -1;
}
SOCKET socket1;
struct sockaddr_in server;
int len =sizeof(server);
socket1=socket(AF_INET,SOCK_DGRAM,0);//数据报套接字

CString strError;
ASSERT(p!=NULL);//
CIPTVServerDlg *pDlg = (CIPTVServerDlg*)p;
CString strIP;

pDlg->m_DestIP.GetWindowText(strIP);
CString tmpPort;
pDlg->m_PortCh1.GetWindowText(tmpPort);
pDlg->m_Port1=atoi(tmpPort);

server.sin_family=AF_INET; //地址族,常被赋为AF_INET
server.sin_port=htons(pDlg->m_Port1); //server的监听端口
server.sin_addr.S_un.S_addr=inet_addr(strIP.GetBuffer(0));

int ret=0;

//文件操作
int ret1=0;
CString strPathName =pDlg->OpenFileAdress1;
FILE *pt;
if((pt=fopen(strPathName,"rb"))==NULL)
{
AfxMessageBox("打开文件失败");
}

char temp[1024]; //首先用来存放文件大小,后面用作发送文件缓冲区
memset(temp,0,sizeof(temp));

/////////////////////////发送文件///////////////////////////////////////////
int iEnd =0;
int ilen =0;
long iTmp =0;

while (1)
{
ilen=fread(temp,1,1024,pt);
iEnd=sendto(socket1,temp,ilen,0,(struct sockaddr*)&server,len);
Sleep(5);
if (iEnd==SOCKET_ERROR)
{
strError.Format("Send File:%d",error=WSAGetLastError());
AfxMessageBox(strError);
break;
}
iTmp +=iEnd;
//一个图片发完中间停顿。
if(feof(pt))
{
Sleep(1000/25);
fseek(pt,0,SEEK_SET);
}

}

return 0;
}

通道2和通道3的类似就不累述了。

posted on 2011-08-16 13:57  静幽独白  阅读(682)  评论(0编辑  收藏  举报

导航