不知哪位高手能给我一些相关源代码(关键部分);
解决方案 »
- 关于数据库连接
- 一个完全用API设计的项目,怎么能嵌入MFC??????急,马上解决,立刻给分(没分了.......)
- 创建子窗口 ----需急用,请各位大侠赐教
- XP注册表编程修改的问题
- 关闭windows时,会触发什么消息?
- ORACLE BLOB 或者SQL SERVER IMAGE 用ADO怎么可以读入读出mp3文件数据?为什么图片可以,其他类型文件读出就不正确(文件数据被改写了)
- 软件设计大赛,奖品丰厚,十分诱人,快来参加了
- 升级做老爸了,给孩子求征名!
- 求救!窗口最小化后隐藏的问题!
- 我相信这里有高手!只有这么多分了!
- 高分求助:
- 怎样得到浏览输入的地址?监视用的。高分求助!!用哪个API,
SOCKET m_hSocket;
SOCKADDR_IN m_addr;void CSockServerDlg::OnOK()
{
// TODO: Add extra validation here
if(m_hSocket!=NULL)
{
::closesocket(m_hSocket);
m_hSocket = NULL;
}
if(m_hSocket==NULL)
{
m_hSocket = socket(AF_INET,SOCK_STREAM,0);
ASSERT(m_hSocket!=NULL);
} UpdateData();
m_addr.sin_family = AF_INET;
m_addr.sin_addr.S_un.S_addr = INADDR_ANY;
m_addr.sin_port = htons(m_nPort); //bind
int ret=0;
ret=::bind(m_hSocket,(LPSOCKADDR)&m_addr,sizeof(m_addr));
if(ret == SOCKET_ERROR)
{
TRACE("Bind Error:%d\n",::WSAGetLastError());
return;
}
//listen
ret=::listen(m_hSocket,2);
if(ret == SOCKET_ERROR)
{
TRACE("Listrn Error:%d\n",::WSAGetLastError());
return;
} // wait to accept
SOCKET s=::accept(m_hSocket,NULL,NULL);
if(ret == SOCKET_ERROR)
{
TRACE("Accept Error:%d\n",::WSAGetLastError());
return;
} //receive data by socket s
char buff[256];
ret=::recv(s,buff,256,0);
if(ret == 0 || ret == SOCKET_ERROR ){
TRACE("Recv data error: %d\n", WSAGetLastError());
return ;
} //get out the name and the password from the buff
char* name = NULL;
char* pass = NULL;
int len1 = 0;
int len2 = 0;
len1 = buff[0];
name = new char[len1+1];
for(int i=0;i<len1;i++)
{
name[i] = buff[i+1];
}
name[len1] = '\0'; len2 = buff[len1+1];
pass = new char[len2+1];
for( i=0;i<len2;i++)
{
pass[i] = buff[i+len1+2];
}
pass[len2] = '\0'; CString str;
if(::strcmp(name,"ware")!=0)
{
str = _T(" 用户名不正确");
TRACE(_T("用户名不正确\n"));
} else
{
if(::strcmp(pass,"11111")!=0)
{
str = _T(" 用户密码不正确");
TRACE(_T("用户密码不正确\n"));
}
} if(str.IsEmpty())
{
str = "你的账户余额为20.355元";
}
char* buf=str.GetBuffer(0);
ret = ::send(s,buf,str.GetLength(),0);
if(ret != str.GetLength())
{
TRACE("Send data error: %d\n", WSAGetLastError());
return ;
} delete [] name;
delete [] pass;
}void CSockServerDlg::OnDestroy()
{
CDialog::OnDestroy();
// TODO: Add your message handler code here
this->CleanUp();
}void CSockServerDlg::StartUp()
{
WSADATA wsaData;
WORD version=MAKEWORD(2,0);
int ret = ::WSAStartup(version,&wsaData);
if(ret!=0)
TRACE("Initialize error!\n");
}void CSockServerDlg::CleanUp()
{
if(::WSACleanup()!=0)
TRACE("UnInitialize Error:%d\n",::WSAGetLastError());
}
Client端:
SOCKET m_hSocket;
SOCKADDR_IN m_addr;BOOL CSockClientDlg::OnInitDialog()
{
CDialog::OnInitDialog(); // Add "About..." menu item to system menu. // IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
} // Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
this->StartUp();
return TRUE; // return TRUE unless you set the focus to a control
}void CSockClientDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.void CSockClientDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2; // Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CSockClientDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}void CSockClientDlg::OnOK()
{
// TODO: Add extra validation here
//create socket and connect to server
if(m_hSocket != NULL)
{
::closesocket(m_hSocket);
m_hSocket = NULL;
}
if(m_hSocket ==NULL)
{
m_hSocket = socket(AF_INET, SOCK_STREAM,0);
ASSERT(m_hSocket != NULL);
}
UpdateData(); m_addr.sin_family = AF_INET;
m_addr.sin_addr.S_un.S_addr = inet_addr(m_serverIP.GetBuffer(0));
m_addr.sin_port = htons(m_nPort);
int ret =0;
int error=0;
ret = ::connect(m_hSocket,(LPSOCKADDR)&m_addr,sizeof(m_addr));
if(ret == SOCKET_ERROR)
{
TRACE("Connect Error:%d\n",::WSAGetLastError());
if(error == 10061)
AfxMessageBox(_T("请确认服务器确实已经打开并工作在同样的端口!"));
return ;
} //send user name and passwor to the server
CString str;
str += char(m_user.GetLength());
str += m_user;
str += char(m_passWord.GetLength());
str += m_passWord; char* buf = str.GetBuffer(0);
ret = ::send(m_hSocket,buf,str.GetLength(),0);
if(ret != str.GetLength())
{
TRACE("Senddata Error:%d\n",::WSAGetLastError());
return;
} //wait to receive data from the server
char buff[256];
ret = ::recv(m_hSocket,buff,256,0);
if(ret ==0 )
{
TRACE("receive data Error:%d\n",::WSAGetLastError());
}
buff[ret] = '\0';
AfxMessageBox(buff);}void CSockClientDlg::OnDestroy()
{
CDialog::OnDestroy();
// TODO: Add your message handler code here
if(m_hSocket != NULL){
closesocket(m_hSocket);
m_hSocket = NULL;
}
this->CleanUp();
}void CSockClientDlg::StartUp()
{
WSADATA wsaData;
DWORD version = MAKEWORD(2,0);
int ret = ::WSAStartup(version,&wsaData);
if(ret != 0)
TRACE(_T("Initlize Error\n"));
}void CSockClientDlg::CleanUp()
{
int ret = ::WSACleanup();
if(ret != 0)
{
TRACE(_T("UnInitlize Error\n"));
}
}