C++网络编程之SOCKET应用篇
2010年06月22日
思想现代化的重要性
论编程的递归思想
谈二叉树的顺序存储与链式存储结构。
关于图的概念,邻接矩阵的理解。
关于WIN7中TOP SITES的立体感官。
关于系统的设计精髓的讨论
:封装思想,设计模式,STL泛型抽象结构化编程,以及哈夫曼树最优二杈树的实际应用。
DNS 202.99.160.68
202.99.168.8
//winsock2.h
数据传输方案
OnInitDialog()
{
//创建套接字
m_Server=socket(AF_INET,SOCK_STREAM,0);
m_Client=socket(AF_INET,SOCK_STREAM,0);
if(m_Server==INVALID_SOCKET||m_Client==INVALID_SOCKET)
{
MessageBox("套接字创建失败");
return TRUE;
}
WSAAsyncSelect(m_Server,m_hWnd,CM_SOCKETMESSAGE,,FD_ACCEPT);
char HostName[MAX_PATH];
memset(HostName,0,MAX_PATH);
gethostname(HostName,MAX_PATH);
hostent* HostInfo;
HostInfo=gethostbyname(HostName);
CString IP;
IP=inet_ntoa(*(in_addr*)HostInfo->h_addr_list[0]);
//绑定套接字
ServerAddr.sin_port=htons(800);
ServerAddr.sin_family=PF_INET;
ServerAddr.sin_addr.S_un.S_addr=inet_addr(IP.GetBuffer(0));
if(bind(m_Server,(sockaddr*)&ServerAddr,sizeof(ServerAddr)!=0)
{
MessageBox("套接字绑定地址绑定错误");
return TRUE;
}
//监听套接字
listen(m_Servers,5);
return TRUE;
};
//处理连接按钮的事件
void CReConnectDlg::OnConnect()
{
CString port;
m_ServerPort.GetWindowText(port);
CString name;
m_ServerAddr.GetWindowText(name);
if(port.IsEmpty()||name.IsEmpty())
{
MessageBox("请设置服务器信息");
}
closesocket(m_Client);
m_Client=socket(AF_INET,SOCK_STREAM,0);
sockeaddr_in addr;
addr.sin_family=AF_INET;
addr.sin_port=htons(atof(port));
addr.sin_addr.S_un.S_addr=inet_addr(name);
if(connect(m_Client,(sockaddr*)&addr,sizeof(ServerAddr)==0)
{
MessageBox("连接成功");
}
else
{
MessageBox("连接失败");
}
}
//处理断开的单击事件
void CReConnectDlg::OnDisconnect()
{
closesocket(m_Client);
}
/
//
#include "winsock2.h"
#pragma comment(lib,"ws2_32.lib")
BOOL CMy001App::InitInstance()
{
AfxEnableControlContainer();
#ifdef_AFXDLL
Enabel3dControls()
#else
Enable3dControlsStatic()
#endif
//初始化套接字
WSADATA wsd;
WSAStartup(makeword(2,2),&wsd);
CMy001Dlg dlg;
m_pMainWnd=&dlg;
int nResponse=dlg.DoModal();
if(nResponse==IDOK)
{}
else if(nResponse==IDCANCLE)
{}
return FALSE;
}
//在初始化时创建套接字,并设置套接字端口
BOOL CMy001Dlg::OnInitDialog()
{
CDialog::OnitDialog();
ASSERT(IDM_ABOUTBOX&0xFFF0)==IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOXAppendMenu(MF_SEPARATOR);
PSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);
}
}
SetIcon(m_hIcon,TRUE);
SetIcon(m_hIcon,FALSE);
//创建服务器套接字
m_ServerSocket=socket(AF_INET,SOCK_STREAM,0);
m_ClientSocket=socket(AF_INET,SOCKET_STREAM,0);
if(m_ServerSocket==INVALID_SOCKET||m_ClientSocket==INNVALID_SOCKET)
return TRUE;
}
WSAAsyncSelect(m_ServerSocket,m_hWnd,CM_SOCKETMESSAGE,FD_ACCEPT);
char HostName[MAX_PATH];
memset(HostName,0,MAX_PATH);
gethostname(HostName,MAX_PATH);
hostent* HostInfo;
HostInfo=gethostbyname(HostName);
CString IP;
IP=inet_ntoa(*(in_addr*)HostInfo->h_addr_list[0]);
//绑定套接字
ServerAddr.sin_port=htons(50);
ServerAddr.sin_family=PF_INET;
ServerAddr.sin_addr.S_un.S_addr=inet_addr(IP.GetBuffer(0));
if(bind(m_ServerSocket,(sockaddr*)&ServerAddr.sizeof(ServerAddr)!=0)
{
MessageBox("套接字地址绑定错误");
return TRUE;
}
//监听套接字
listen(m_ServerSocket,5);
return TRUE;
}
//处理连接按钮的单击事件,连接服务器,如果连接超时,将弹出对话框进行提示。
voidCMy001Dlg::OnConnect()
{
CString port;
m_ServerPort.GetWindwoText(port);
CString name;
m_ServerName.GetWindowText(name);
if(port.IsEmpty()||name.IsEmpty())
{
MessageBox("请设置服务器信息");
return;
}
//设置非阻塞方式连接
unsigned logn flag=1;
ioctlsocket(m_ClientSocket,FIONBIO,(unsigned long *)&flag);
sockaddr_in addr;
addr.sin_family=AF_INET;
addr.sin_port=htons(atof(port));
addr.sin_addr.S_un.S_addr=inet_addr(name);
connect(m_ClientSocket,(sockaddr*)&addr,sizeof(addr));
struct timeval timeout;
fd_set sets;
FD_ZERO(&sets);
FD_SET(m_ClientSocket,&sets);
timeout.tv_sec=1;//连接超时15秒
timeout.tv_usec=0;
int result-select(0,0,&sets,0,&timeout);
if(result<=0)
{
MessageBox("连接超时");
}
else
{
MessageBox("连接成功");
}
//设置阻塞方式连接
flag=0;
ioclsocket(m_ClientSocket,FIONBIO,(unsigned long*)&flag);
}
文件传输方案
2010年06月22日
思想现代化的重要性
论编程的递归思想
谈二叉树的顺序存储与链式存储结构。
关于图的概念,邻接矩阵的理解。
关于WIN7中TOP SITES的立体感官。
关于系统的设计精髓的讨论
:封装思想,设计模式,STL泛型抽象结构化编程,以及哈夫曼树最优二杈树的实际应用。
DNS 202.99.160.68
202.99.168.8
//winsock2.h
数据传输方案
OnInitDialog()
{
//创建套接字
m_Server=socket(AF_INET,SOCK_STREAM,0);
m_Client=socket(AF_INET,SOCK_STREAM,0);
if(m_Server==INVALID_SOCKET||m_Client==INVALID_SOCKET)
{
MessageBox("套接字创建失败");
return TRUE;
}
WSAAsyncSelect(m_Server,m_hWnd,CM_SOCKETMESSAGE,,FD_ACCEPT);
char HostName[MAX_PATH];
memset(HostName,0,MAX_PATH);
gethostname(HostName,MAX_PATH);
hostent* HostInfo;
HostInfo=gethostbyname(HostName);
CString IP;
IP=inet_ntoa(*(in_addr*)HostInfo->h_addr_list[0]);
//绑定套接字
ServerAddr.sin_port=htons(800);
ServerAddr.sin_family=PF_INET;
ServerAddr.sin_addr.S_un.S_addr=inet_addr(IP.GetBuffer(0));
if(bind(m_Server,(sockaddr*)&ServerAddr,sizeof(ServerAddr)!=0)
{
MessageBox("套接字绑定地址绑定错误");
return TRUE;
}
//监听套接字
listen(m_Servers,5);
return TRUE;
};
//处理连接按钮的事件
void CReConnectDlg::OnConnect()
{
CString port;
m_ServerPort.GetWindowText(port);
CString name;
m_ServerAddr.GetWindowText(name);
if(port.IsEmpty()||name.IsEmpty())
{
MessageBox("请设置服务器信息");
}
closesocket(m_Client);
m_Client=socket(AF_INET,SOCK_STREAM,0);
sockeaddr_in addr;
addr.sin_family=AF_INET;
addr.sin_port=htons(atof(port));
addr.sin_addr.S_un.S_addr=inet_addr(name);
if(connect(m_Client,(sockaddr*)&addr,sizeof(ServerAddr)==0)
{
MessageBox("连接成功");
}
else
{
MessageBox("连接失败");
}
}
//处理断开的单击事件
void CReConnectDlg::OnDisconnect()
{
closesocket(m_Client);
}
/
//
#include "winsock2.h"
#pragma comment(lib,"ws2_32.lib")
BOOL CMy001App::InitInstance()
{
AfxEnableControlContainer();
#ifdef_AFXDLL
Enabel3dControls()
#else
Enable3dControlsStatic()
#endif
//初始化套接字
WSADATA wsd;
WSAStartup(makeword(2,2),&wsd);
CMy001Dlg dlg;
m_pMainWnd=&dlg;
int nResponse=dlg.DoModal();
if(nResponse==IDOK)
{}
else if(nResponse==IDCANCLE)
{}
return FALSE;
}
//在初始化时创建套接字,并设置套接字端口
BOOL CMy001Dlg::OnInitDialog()
{
CDialog::OnitDialog();
ASSERT(IDM_ABOUTBOX&0xFFF0)==IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOXAppendMenu(MF_SEPARATOR);
PSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);
}
}
SetIcon(m_hIcon,TRUE);
SetIcon(m_hIcon,FALSE);
//创建服务器套接字
m_ServerSocket=socket(AF_INET,SOCK_STREAM,0);
m_ClientSocket=socket(AF_INET,SOCKET_STREAM,0);
if(m_ServerSocket==INVALID_SOCKET||m_ClientSocket==INNVALID_SOCKET)
return TRUE;
}
WSAAsyncSelect(m_ServerSocket,m_hWnd,CM_SOCKETMESSAGE,FD_ACCEPT);
char HostName[MAX_PATH];
memset(HostName,0,MAX_PATH);
gethostname(HostName,MAX_PATH);
hostent* HostInfo;
HostInfo=gethostbyname(HostName);
CString IP;
IP=inet_ntoa(*(in_addr*)HostInfo->h_addr_list[0]);
//绑定套接字
ServerAddr.sin_port=htons(50);
ServerAddr.sin_family=PF_INET;
ServerAddr.sin_addr.S_un.S_addr=inet_addr(IP.GetBuffer(0));
if(bind(m_ServerSocket,(sockaddr*)&ServerAddr.sizeof(ServerAddr)!=0)
{
MessageBox("套接字地址绑定错误");
return TRUE;
}
//监听套接字
listen(m_ServerSocket,5);
return TRUE;
}
//处理连接按钮的单击事件,连接服务器,如果连接超时,将弹出对话框进行提示。
voidCMy001Dlg::OnConnect()
{
CString port;
m_ServerPort.GetWindwoText(port);
CString name;
m_ServerName.GetWindowText(name);
if(port.IsEmpty()||name.IsEmpty())
{
MessageBox("请设置服务器信息");
return;
}
//设置非阻塞方式连接
unsigned logn flag=1;
ioctlsocket(m_ClientSocket,FIONBIO,(unsigned long *)&flag);
sockaddr_in addr;
addr.sin_family=AF_INET;
addr.sin_port=htons(atof(port));
addr.sin_addr.S_un.S_addr=inet_addr(name);
connect(m_ClientSocket,(sockaddr*)&addr,sizeof(addr));
struct timeval timeout;
fd_set sets;
FD_ZERO(&sets);
FD_SET(m_ClientSocket,&sets);
timeout.tv_sec=1;//连接超时15秒
timeout.tv_usec=0;
int result-select(0,0,&sets,0,&timeout);
if(result<=0)
{
MessageBox("连接超时");
}
else
{
MessageBox("连接成功");
}
//设置阻塞方式连接
flag=0;
ioclsocket(m_ClientSocket,FIONBIO,(unsigned long*)&flag);
}
文件传输方案