1. CSelectFileClientDlg.cpp
void CSelectFileClientDlg::OnBnClickedButtonConnect()
{
/********************** 判断用户输入 ***********************/
CString variable_port ;
CString variable_ip ;
_ip_address.GetWindowText(variable_ip) ;
_ip_address.GetAddress(ip) ;
_port.GetWindowText(variable_port) ;
//MessageBox(variable_port) ;
//MessageBox(variable_ip) ;
ip = htonl(ip);
if(ip == 0){
MessageBox("请输入要连接的server ip!") ;
return ;
}
port = atoi(variable_port) ;
if(port == 0 ){
MessageBox("请输入要链接的端口号!") ;
return ;
}
if(!client_end.client_to_socket(ip,port))
{
MessageBox("socket()函数执行错误!") ;
exit(1);
}
if(!client_end.client_to_connect()){
MessageBox("connect()函数执行错误!") ;
exit(1);
}
_message_list.InsertItem(count,"") ;
_message_list.SetItemText(count++,0,"Connection established at remote Server at:"+variable_ip+":"+variable_port) ;
}
void CSelectFileClientDlg::OnBnClickedButtonExit()
{
OnOK();
}
void CSelectFileClientDlg::OnBnClickedButtonAbout()
{
CString about ;
about.Append(_T("姓名:侯庆东\n"));
about.Append(_T("学号:123520081203010\n")) ;
MessageBox(about) ;
}
void CSelectFileClientDlg::OnBnClickedButtonTrace()
{
CString file_name ;
_file_name.GetWindowText(file_name) ;
file_name_public = file_name ;
if(file_name==""){
MessageBox("请求的文件名不能为空!") ;
return ;
}
/******************** 开始构造第一个用于追踪的包 *********************/
int file_name_length = file_name.GetLength() ;
char *Data=NULL ;
Data = (LPSTR)(LPCTSTR)file_name ;
MessagePacket myask ;
myask = Go_to_make_packet(TYPE_TRACE,FUTURE,12+file_name_length,0,0,Data,file_name_length) ;
INT send_nums ;
char* buffer=NULL ;
/* memcpy(buffer,(char*)&myask,1) ;
memcpy(buffer+1,(char*)&myask,1) ;
memcpy(buffer+2,(char*)&myask,2) ;
memcpy(buffer+4,(char*)&myask,4) ;
memcpy(buffer+8,(char*)&myask,4) ;
memcpy(buffer+12,(char*)&myask,file_name_length) ;
*/
if ((send_nums=client_end.client_to_send((char*)&myask,file_name_length+12))<0)
{
MessageBox("send()函数出错!") ;
exit(1) ;
}else{
_message_list.InsertItem(count,"") ;
_message_list.SetItemText(count++,0,"Requesting file information on the server:"+file_name) ;
}
if(!client_end.client_to_recv())
{
MessageBox("recv() file size 函数出错!") ;
exit(1);
}else{
MessagePacket msg ;
memcpy(&msg,client_end.recv_buffer,sizeof(msg)) ;
unsigned int file_size ;
file_size = msg.msgheader.Size ;
file_size = file_size/1024 ;
CString csfile_size ;
csfile_size.Format("%d",file_size) ;
_message_list.InsertItem(count,"") ;
_message_list.SetItemText(count++,0,"Received the size from the server:"+csfile_size+"KB") ;
//memset(client_end.recv_buffer,'\0',sizeof(client_end.recv_buffer)) ;
}
}
/******************** 构造发送包的函数 *************************/
MessagePacket CSelectFileClientDlg::Go_to_make_packet(char type,char future,unsigned short total_len, unsigned long position, unsigned int size, char *data ,INT data_len)
{
MessagePacket new_packet ;
new_packet.msgheader.Type = type ;
new_packet.msgheader.Reserved = future ;
new_packet.msgheader.TotalLength = total_len ;
new_packet.msgheader.Position = position ;
new_packet.msgheader.Size = size ;
memcpy(new_packet.Data,data,data_len);
return new_packet ;
}
void CSelectFileClientDlg::OnBnClickedButtonDownload()
{
CDialog_sub dlgsub ;
dlgsub.DoModal();
}
LRESULT CSelectFileClientDlg::Sub_Window_Process(