winsock UPD

 

VC upd编程

  20人阅读  评论(0)  收藏  举报

记录一下
获得本机IP

[html]  view plain copy
  1. <span style="white-space:pre">  </span>char hostname[128];   
  2.     gethostname(hostname,128);   
  3.     struct hostent *pHost = gethostbyname(hostname);   
  4.     for (int i = 0; pHost != NULL && pHost->h_addr_list[i] != NULL; i++)   
  5.     {   
  6.         printf("%s\n",inet_ntoa(*(struct in_addr *)pHost->h_addr_list[i]));   
  7.         localIP += inet_ntoa(*(struct in_addr *)pHost->h_addr_list[i]);  
  8.     }   
  9.   
  10.     WSACleanup();   

发送按钮处理函数

[html]  view plain copy
  1. void CUdpDlg::OnOK()   
  2. {  
  3.     // TODO: Add extra validation here  
  4.     CWnd* pWnd = GetDlgItem(IDC_EDIT1);  
  5.     CString msg,ip,port;  
  6.     pWnd->GetWindowText(msg);  
  7.     pWnd = GetDlgItem(IDC_EDIT2);  
  8.     pWnd->GetWindowText(ip);  
  9.     pWnd = GetDlgItem(IDC_EDIT3);  
  10.     pWnd->GetWindowText(port);  
  11.       
  12.     Sendudp(msg.GetBuffer(0),ip.GetBuffer(0),atoi(port.GetBuffer(0)));  
  13.   
  14.       
  15. }  

接收按钮处理函数

[html]  view plain copy
  1. HANDLE hThread;  
  2. int recstart = 0;  
  3. SOCKET socketSrv;  
  4. void CUdpDlg::OnButton1()   
  5. {  
  6.     // TODO: Add your control notification handler code here  
  7.     LPDWORD ThreadID=0;  
  8.     if(!recstart)  
  9.     {  
  10.         hThread=CreateThread(NULL,0,  
  11.            (LPTHREAD_START_ROUTINE)ReciveUdp,  
  12.             NULL,0,  
  13.             ThreadID);  
  14.             GetDlgItem(IDC_BUTTON1)->SetWindowText("停止");  
  15.             //GetDlgItem(IDC_BUTTON1)->EnableWindow(FALSE);  
  16.             recstart = 1;  
  17.     }  
  18.     else  
  19.     {  
  20.         TerminateThread(hThread,0);  
  21.         FreeConsole();  
  22.         closesocket(socketSrv);  
  23.         WSACleanup();  
  24.         GetDlgItem(IDC_BUTTON1)->SetWindowText("接收");  
  25.         recstart = 0;  
  26.           
  27.     }  
  28. }  

发送及接收函数

[html]  view plain copy
  1. //-----------------------------------------------  
  2. void Sendudp(char *msg,char *ip,int port)  
  3. {  
  4.     /*  
  5.         socket编程三步骤  
  6.         1、创建套接字socket  
  7.         2、发送数据  
  8.         3、关闭套接字  
  9.     */  
  10.     WORD wVersionRequested;  
  11.     WSADATA wsaData;  
  12.     int err;  
  13.   
  14.     wVersionRequested = MAKEWORD( 2, 2 );  
  15.   
  16.     err = WSAStartup( wVersionRequested, &wsaData );  
  17.     if ( err != 0 )   
  18.     {  
  19.         /* Tell the user that we could not find a usable */  
  20.         /* WinSock DLL.                                  */  
  21.         return;  
  22.     }  
  23.   
  24.     /* Confirm that the WinSock DLL supports 2.2.*/  
  25.     /* Note that if the DLL supports versions greater   */  
  26.     /* than 2.2 in addition to 2.2, it will still return */  
  27.     /* 2.2 in wVersion since that is the version we     */  
  28.     /* requested.                                       */  
  29.   
  30.     if ( LOBYTE( wsaData.wVersion ) != 2 ||  
  31.           HIBYTE( wsaData.wVersion ) != 2 )   
  32.     {  
  33.         /* Tell the user that we could not find a usable */  
  34.         /* WinSock DLL.                                  */  
  35.         WSACleanup( );  
  36.         return;  
  37.     }  
  38.     SOCKET sockClient=socket(AF_INET,SOCK_DGRAM,0);  
  39.     SOCKADDR_IN addrSrv;  
  40.     addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");  
  41.     addrSrv.sin_family=AF_INET;  
  42.     addrSrv.sin_port=htons(port);  
  43.     sendto(sockClient,msg,  
  44.         strlen(msg)+1,0,  
  45.         (SOCKADDR*)&addrSrv,sizeof(SOCKADDR));  
  46.     closesocket(sockClient);  
  47.     WSACleanup();  
  48. }  
  49.   
  50. void ReciveUdp()  
  51. {  
  52. /*  
  53.     1、创建socket  
  54.     2、将套接字绑定到一个本地地址和端口上bind  
  55.     3、等待接受数据receive from  
  56.     4、关闭套接字。  
  57. */  
  58.     WORD wVersionRequested;  
  59.     WSADATA wsaData;  
  60.     int err;  
  61.   
  62.     wVersionRequested = MAKEWORD( 2, 2 );  
  63.   
  64.     err = WSAStartup( wVersionRequested, &wsaData );  
  65.     if ( err != 0 ) {  
  66.     /* Tell the user that we could not find a usable */  
  67.     /* WinSock DLL.                                  */  
  68.          return;  
  69.     }  
  70.   
  71.     /* Confirm that the WinSock DLL supports 2.2.*/  
  72.     /* Note that if the DLL supports versions greater   */  
  73.     /* than 2.2 in addition to 2.2, it will still return */  
  74.     /* 2.2 in wVersion since that is the version we     */  
  75.     /* requested.                                       */  
  76.   
  77.     if ( LOBYTE( wsaData.wVersion ) != 2 ||  
  78.           HIBYTE( wsaData.wVersion ) != 2 ) {  
  79.     /* Tell the user that we could not find a usable */  
  80.     /* WinSock DLL.                                  */  
  81.         WSACleanup( );  
  82.         return;  
  83.     }  
  84.     //SOCKET socketSrv;  
  85.     socketSrv=socket(AF_INET,SOCK_DGRAM,0);  
  86.     SOCKADDR_IN addrSrv;  
  87.     addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);  
  88.     addrSrv.sin_family=AF_INET;  
  89.     addrSrv.sin_port=htons(5000);  
  90.     bind(socketSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));  
  91.     SOCKADDR_IN addrClient;  
  92.     int len=sizeof(SOCKADDR);  
  93.     char recvBuf[1024];  
  94.   
  95.     AllocConsole();     //打开控制台  
  96.     freopen("CONOUT$","w+t",stdout);   
  97.     freopen("CONIN$","r+t",stdin);   
  98.     while(1)  
  99.     {  
  100.         recvfrom(socketSrv,recvBuf,1024,0,(SOCKADDR*)&addrClient,&len);  
  101.         printf("%s\n",recvBuf);  
  102.     }  
  103. //  FreeConsole();  
  104. //  closesocket(socketSrv);  
  105. //  WSACleanup();  
  106. }  






查看评论

  暂无评论

* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
TOP
公司简介| 招贤纳士| 广告服务| 银行汇款帐号| 联系方式| 版权声明| 法律顾问| 问题报告
京 ICP 证 070598 号
北京创新乐知信息技术有限公司 版权所有
世纪乐知(北京)网络技术有限公司 提供技术支持
江苏乐知网络技术有限公司 提供商务支持
 联系邮箱:webmaster(at)csdn.net
Copyright © 1999-2012, CSDN.NET, All Rights Reserved  GongshangLogo
close

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值