C++网络编程之SOCKET应用篇

本文详细介绍了使用C++进行Socket编程的方法,包括套接字的创建、绑定、监听及客户端连接处理等关键步骤。通过具体代码示例展示了如何在Windows环境下实现服务器与客户端的数据通信。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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);
  }
  文件传输方案
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值