现在的位置: 首页 > 综合 > 正文

与杨老师在一起的日子之用C连接网络

2013年10月14日 ⁄ 综合 ⁄ 共 2382字 ⁄ 字号 评论关闭

用C语言连接网络一直是一个比较困惑的问题

以前不知道如何去连接,现在有了这么一个指引应该好办多了

Code:
  1. #include "stdafx.h"   
  2. #include <windows.h>   
  3. #include <windowsx.h>   
  4. #include <winsock2.h>   
  5. #include "resource.h"   
  6. #include "MainDlg.h"   
  7.   
  8.   
  9. BOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)   
  10. {   
  11.     switch(uMsg)   
  12.     {   
  13.         HANDLE_MSG(hWnd, WM_INITDIALOG, Main_OnInitDialog);   
  14.         HANDLE_MSG(hWnd, WM_COMMAND, Main_OnCommand);   
  15.         HANDLE_MSG(hWnd,WM_CLOSE, Main_OnClose);   
  16.     }   
  17.   
  18.     return FALSE;   
  19. }   
  20.   
  21. BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)   
  22. {   
  23.     return TRUE;   
  24. }   
  25.   
  26. void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)   
  27. {   
  28.     switch(id)   
  29.     {   
  30.         case IDC_OK:   
  31.         {   
  32.             SocketTest();   
  33.         }   
  34.         break;   
  35.         default:   
  36.         break;   
  37.     }   
  38. }   
  39.   
  40. void Main_OnClose(HWND hwnd)   
  41. {   
  42.     EndDialog(hwnd, 0);   
  43. }   
  44.   
  45. void SocketTest()   
  46. {   
  47.     WSADATA wsaData;   
  48.     //初始化Socket库   
  49.     WSAStartup(MAKEWORD(2,0),&wsaData);   
  50.     //创建一根电线   
  51.     SOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);   
  52.     SOCKADDR_IN sa;   
  53.     sa.sin_family=AF_INET;   
  54.     //设置电线连接服务器端的端口   
  55.     sa.sin_port = htons(IPPORT_SMTP);   
  56.     //123.125.50.135是ping smtp.163.com出来的,后面会讲使用gethostbyname来直接从   
  57.     //主机名得到ip地址    
  58.     sa.sin_addr.S_un.S_addr = inet_addr("210.72.145.8");   
  59.     //为什么不用设置客户端的端口,难道不需要客户端的端口吗?   
  60.     if(connect(sock,(SOCKADDR *)&sa,sizeof(sa))==SOCKET_ERROR)   
  61.     {   
  62.         ShowError();   
  63.         return;   
  64.     }   
  65.        
  66.     unsigned long uTime;   
  67.     char buffer[256];   
  68.     ZeroMemory(buffer,sizeof(buffer)/sizeof(char));   
  69.     //接收问候语    
  70.     recv(sock,(char *)&uTime,sizeof(unsigned long),0);   
  71.     wsprintf(buffer,"%i",uTime);   
  72.     MessageBox(NULL,buffer,"",0);   
  73.     //注意不能忘了末尾的回车    
  74.     TCHAR cQuit[] = "QUIT/n";   
  75.     send(sock,cQuit,lstrlen(cQuit),0);    
  76.     ZeroMemory(buffer,sizeof(buffer)/sizeof(char));    
  77.     //接收GoodBye    
  78.     recv(sock,buffer,256,0);   
  79.     MessageBox(NULL,buffer,"",0);   
  80.   
  81.   
  82.     //做事情。把大象放冰箱总共分几步    
  83.     closesocket(sock);   
  84.     WSACleanup();   
  85. }   
  86. void ShowError()   
  87. {   
  88.     TCHAR* lpMsgBuf;   
  89.     FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER| //自动分配消息缓冲区   
  90.         FORMAT_MESSAGE_FROM_SYSTEM, //从系统获取信息   
  91.         NULL,GetLastError(), //获取错误信息标识   
  92.         MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),//使用系统缺省语言   
  93.         (LPTSTR)&lpMsgBuf, //消息缓冲区   
  94.         0,   
  95.         NULL);   
  96.     MessageBox(NULL,lpMsgBuf,"",MB_ICONERROR);    
  97. }  

 

抱歉!评论已关闭.