免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
(多線程版本)完美服務(wù)器連接客戶端(實例)
服務(wù)器端:
void CCWebServerDlg::OnButStartserver()
{
 // TODO: Add your control notification handler code here
 //initialize  Winsock 
 WSADATA  wsaData; 
 CString cs_err;
 int  iRet=WSAStartup(MAKEWORD(1,1),&wsaData); 
 if(iRet!=NO_ERROR) 
  MessageBox("Error  at  WSAStartup()\n"); 
 
 //create  a  socket 
 SOCKET  m_socket; 
 m_socket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); 
 if(m_socket==INVALID_SOCKET) 
 { 
  cs_err.Format("Error  at  socket():%ld\n",WSAGetLastError());
  MessageBox(cs_err);
  WSACleanup(); 
  return  ; 
 } 
 
 //bind  a  socket 
 sockaddr_in  service; 
 service.sin_family=AF_INET; 
 service.sin_addr.s_addr=htonl(INADDR_ANY);//自動獲取本機IP地址
 service.sin_port=htons(9999); 
 
 if(bind(m_socket,(SOCKADDR*)&service,sizeof(service))==SOCKET_ERROR) 
 { 
  MessageBox("bind()  failed.\n"); 
  closesocket(m_socket); 
  return  ; 
 } 
 else 
  MessageBox("bind  OK.\n"); 
 
 //listen  on  a  socket 
 if(listen(m_socket,20)==SOCKET_ERROR) 
  MessageBox("Error  listening  on  socket.\n"); 
 else 
  MessageBox("listening  ok.\n"); 
 
 //accept  a  connection 
 SOCKET  AcceptSocket; 
 
 MessageBox("Waiting  for  a  client  to  connect...\n"); 
 while(1) 
 { 
  AcceptSocket=SOCKET_ERROR; 
  while(AcceptSocket==SOCKET_ERROR) 
  { 
   AcceptSocket=accept(m_socket,NULL,NULL);  /////////////////這里出現(xiàn)阻塞
  } 
  MessageBox("Client  Connected.\n"); 
  
  DWORD  dwThreadId; 
  HANDLE  hThread; 
  
  hThread=CreateThread(NULL,NULL, AnswerThread, (LPVOID)AcceptSocket,0,&dwThreadId); 
  if(hThread==NULL) 
  { 
   MessageBox("CreatThread  AnswerThread()  failed.\n"); 
  } 
  else 
  { 
   MessageBox("CreateThread  OK.\n"); 
  } 
 } 
 return  ; 
 
 
 
}
DWORD  WINAPI  CCWebServerDlg::AnswerThread(LPVOID  lparam) 
 ////注意: static DWORD  WINAPI  AnswerThread(LPVOID  lparam); 

 SOCKET  ClientSocket=(SOCKET)(LPVOID)lparam; 
 
 int  bytesRecv; 
 char  sendbuf[32]=""; 
 char  recvbuf[32]=""; 
 CString cs_err;
 
 while(1) 
 { 
  bytesRecv=SOCKET_ERROR; 
  for(int  i=0;i<(int)strlen(recvbuf);i++) 
  {   recvbuf[i]='\0';  }
  
  
  while(bytesRecv==SOCKET_ERROR) 
  {  //Receiving Data
   bytesRecv=recv(ClientSocket,recvbuf,32,0); 
  } 
  
  
  
  //Write your processing code here
  send(ClientSocket,recvbuf,strlen(recvbuf),0); 
  cs_err.Format("%s",recvbuf);
  AfxMessageBox(cs_err); 
 } 
 return  0; 

客戶端:
void CCWebClientDlg::LinkServer()
{
 
 WORD wVersionRequested;
 WSADATA wsaData;
 int err;
 CString cs_err;
 
 wVersionRequested = MAKEWORD( 1, 1 );//版本號1.1
 //1.加載套接字庫 
 err = WSAStartup( wVersionRequested, &wsaData );
 if ( err != 0 ) {
  MessageBox("Error  at  WSAStartup()\n"); 
  
  return;
 }
 
 //判斷是否我們請求的winsocket版本,如果不是
 //則調(diào)用WSACleanup終止winsocket的使用并返回            
 
 if ( LOBYTE( wsaData.wVersion ) != 1 ||
  HIBYTE( wsaData.wVersion ) != 1 ) {
  
  WSACleanup( );
  return;
 }///...if
 //2.創(chuàng)建套接字
 SOCKET sockClient = socket (AF_INET, SOCK_STREAM, 0);
 if(sockClient==INVALID_SOCKET) 
 { 
  cs_err.Format("Error  at  socket():%ld\n",WSAGetLastError());
  MessageBox(cs_err);
  WSACleanup(); 
  return  ; 
 } 
 
 
 //3.連接服務(wù)器端,無須綁定
 SOCKADDR_IN addrSrv;
 addrSrv.sin_addr.S_un.S_addr = inet_addr(ip);
 //設(shè)定服務(wù)器端IP地址,"127.0.0.1"是本地回路地址
 //不管本地主機上有沒有網(wǎng)卡,都可以用這個IP測試網(wǎng)絡(luò)
 addrSrv.sin_family = AF_INET;
 addrSrv.sin_port = htons(PORT); //端口號要與服務(wù)器端保持一致
 // connect(sockClient,(SOCKADDR *)&addrSrv,sizeof(SOCKADDR));
 //連接服務(wù)器
 
 if(connect(sockClient,(SOCKADDR *)&addrSrv,sizeof(SOCKADDR)) < 0)
  
 {
  
  closesocket(sockClient);
  
  MessageBox("連接服務(wù)器失敗。");
  
  return ;
  
 }
 
 
 
 
 //4.先向服務(wù)器端發(fā)送數(shù)據(jù),再接收服務(wù)器端發(fā)送的數(shù)據(jù)
 ///////////////////
 //發(fā)送到服務(wù)端的數(shù)據(jù)
 
 
 /*
 CString szBuf1;
 GetDlgItem(IDC_MSG)->GetWindowText(szBuf1);//顯示在對話框中
 char sendBuf[1024];
 strncpy(sendBuf,szBuf1,sizeof(sendBuf));
 //MessageBox("sssssssss1");
 send(sockClient,(LPCTSTR)sendBuf,strlen(sendBuf)+1,0);
 //MessageBox("sssssssss2");
 char recvBuf[1024];
 int m;
 m=recv(sockClient,recvBuf,1024,0);
 CString szBuf;
 szBuf.Format("%s",recvBuf);
 GetDlgItem(IDC_RECEIVEMSG)->SetWindowText(szBuf);
 //MessageBox(sendBuf);
 
 */
 
 //5.關(guān)閉套接字,釋放資源,并且終止對套接字庫的使用
 closesocket(sockClient);
 WSACleanup();
 //加頭文件< winsock2.h.>
 //連接 ws2_32.lib
 
 
}
//////////////初始化網(wǎng)絡(luò)設(shè)置
void CCWebClientDlg::InitSocket()
{
 WORD  wVersionRequested; 
 WSADATA  wsaData; 
 char  name[255]; 
 // CString  ip;
 int err;
 
 PHOSTENT  hostinfo; 
 wVersionRequested  =  MAKEWORD( 1, 1 );//版本號1.1
 
 
 
 //1.加載套接字庫 
 err = WSAStartup( wVersionRequested, &wsaData );
 if ( err != 0 ) {
  
  return;
 }
 
 //判斷是否我們請求的winsocket版本,如果不是
 //則調(diào)用WSACleanup終止winsocket的使用并返回            
 
 if ( LOBYTE( wsaData.wVersion ) != 1 ||
  HIBYTE( wsaData.wVersion ) != 1 ) {
  
  WSACleanup( );
  return;
 }///...if
 
 if  ( err  ==  0  ) 
 { 
  
  if(  gethostname  (  name,  sizeof(name))  ==  0) 
  { 
   if((hostinfo  =  gethostbyname(name))  !=  NULL) 
   { 
    ip  =  inet_ntoa  (*(struct  in_addr  *)*hostinfo->h_addr_list); 
   } 
  } 
  
  WSACleanup(  ); 
 }   
 
 SetDlgItemText(IDC_IPADDRESS1,ip);  //ip中是本機IP 
 // SetDlgItemText(IDC_EDIT_PORT,name);//name里是本機名
 
 CString cs_Port;
 int i_Port;
    i_Port =PORT;
    cs_Port.Format("%d",i_Port);
 SetDlgItemText(IDC_EDIT_PORT,cs_Port);
}
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
C++ Socket編程步驟
VC 編寫的Socket udp通信程序
TCP協(xié)議與UDP協(xié)議的區(qū)別
Windows API 教程(九) 網(wǎng)絡(luò)編程
WSASTARTUP
windows下C++的socket編程入門--文件傳輸
更多類似文章 >>
生活服務(wù)
分享 收藏 導長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服