UDP01
#include <windows.h>
#include 
<winsock.h>
#pragma comment(lib,
"ws2_32.lib")

HINSTANCE hInst;
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
int APIENTRY WinMain(HINSTANCE hI,HINSTANCE hP,LPSTR lp,int nC)
{
  MSG msg;
  HWND hWnd;
  hInst 
= hI;
  WNDCLASS wc;
  memset(
&wc,0,sizeof(WNDCLASS));
  wc.lpfnWndProc 
= (WNDPROC)WndProc;
  wc.hInstance 
= hI;
  wc.hIcon 
= LoadIcon(NULL,IDI_APPLICATION);
  wc.hbrBackground 
= (HBRUSH)COLOR_WINDOW;
  wc.lpszClassName 
= "W1";
  RegisterClass(
&wc);
  hWnd 
= CreateWindowEx(WS_EX_PALETTEWINDOW,"W1","UDP程序2 端口号:8000",
                        WS_OVERLAPPEDWINDOW,
100,100,200,100,NULL,NULL,
                        hI,NULL );
  
if(!hWnd) return FALSE;
  ShowWindow(hWnd,nC);

  
while(GetMessage(&msg,NULL,0,0))
  
{
    TranslateMessage(
&msg);
    DispatchMessage(
&msg);
  }

  
return msg.wParam;
  
}



////////////////////////////////////////////////////
//定义winsock API需要的量
WSADATA ws;
SOCKET s1,s2;
struct sockaddr_in Cs1A,Cs2A;
char sendBuf[200];
char recvBuf[200];
int len;
#define Cs1Port 6000
#define Cs2Port 8000
#define Cs1IP "127.0.0.1"
#define Cs2IP "127.0.0.1"
//////////////////////////////////////////////////


LRESULT CALLBACK WndProc(HWND hW,UINT msg,WPARAM wP,LPARAM IP)
{
  
switch(msg)
  
{
     
case WM_DESTROY://关闭程序触发事件
                     WSAAsyncSelect(s1,hW,0,0);//向Windows注销socket触发事件
                     closesocket(s1);//释放连接
                     WSACleanup();//卸载winsock库
                     PostQuitMessage(0);
                     
break;
     
case WM_CREATE://初始化触发事件
                     WSAStartup(0x0202,&ws);
                     s1 
= socket(AF_INET,SOCK_DGRAM,0);
                     
//本地
                     Cs1A.sin_family = AF_INET;
                     Cs1A.sin_port 
= htons(Cs1Port);
                     Cs1A.sin_addr.s_addr 
= inet_addr(Cs1IP);
                     len 
= bind(s1,(struct sockaddr *)&Cs1A,sizeof(Cs1A));
                     
//远程
                     Cs2A.sin_family = AF_INET;
                     Cs2A.sin_port 
= htons(Cs2Port);
                     Cs2A.sin_addr.s_addr 
= inet_addr(Cs2IP);
                     WSAAsyncSelect(s1,hW,WM_USER
+1,FD_READ);//向Windows注册网络事件
                    
                     
break;

     
case WM_USER+1://socket触发事件
                    switch(LOWORD(IP))
                    
{
                      
case FD_READ: len = recv(s1,recvBuf,sizeof(recvBuf),0);
                                    recvBuf[len] 
= 0;
                                    MessageBox(
0,recvBuf,"UDP程序2从UDP程序1收到的数据",0);
                                    
break;
                    }

                    
break;
     
case WM_LBUTTONDOWN://点击鼠标左键
                       wsprintf(sendBuf,"Hello,UDO程序1!");
                       len 
= sizeof(Cs2A);
                       sendto(s1,sendBuf,strlen(sendBuf),
0,(struct sockaddr *)&Cs2A,len);
                       
break;
  }

  
return DefWindowProc(hW,msg,wP,IP);
}



UDP2
#include <windows.h>
#include 
<winsock.h>
#pragma comment(lib,
"ws2_32.lib")

HINSTANCE hInst;
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
int APIENTRY WinMain(HINSTANCE hI,HINSTANCE hP,LPSTR lp,int nC)
{
  MSG msg;
  HWND hWnd;
  hInst 
= hI;
  WNDCLASS wc;
  memset(
&wc,0,sizeof(WNDCLASS));
  wc.lpfnWndProc 
= (WNDPROC)WndProc;
  wc.hInstance 
= hI;
  wc.hIcon 
= LoadIcon(NULL,IDI_APPLICATION);
  wc.hbrBackground 
= (HBRUSH)COLOR_WINDOW;
  wc.lpszClassName 
= "W1";
  RegisterClass(
&wc);
  hWnd 
= CreateWindowEx(WS_EX_PALETTEWINDOW,"W1","UDP程序1 端口号:6000",
                        WS_OVERLAPPEDWINDOW,
400,200,200,100,NULL,NULL,
                        hI,NULL );
  
if(!hWnd) return FALSE;
  ShowWindow(hWnd,nC);

  
while(GetMessage(&msg,NULL,0,0))
  
{
    TranslateMessage(
&msg);
    DispatchMessage(
&msg);
  }

  
return msg.wParam;
  
}



////////////////////////////////////////////////////
//定义winsock API需要的量
WSADATA ws;
SOCKET s1,s2;
struct sockaddr_in Cs1A,Cs2A;
char sendBuf[200];
char recvBuf[200];
int len;
#define Cs1Port 8000
#define Cs2Port 6000
#define Cs1IP "127.0.0.1"
#define Cs2IP "127.0.0.1"
//////////////////////////////////////////////////


LRESULT CALLBACK WndProc(HWND hW,UINT msg,WPARAM wP,LPARAM IP)
{
  
switch(msg)
  
{
     
case WM_DESTROY://关闭程序触发事件
                     WSAAsyncSelect(s1,hW,0,0);//向Windows注销socket触发事件
                     closesocket(s1);//释放连接
                     WSACleanup();//卸载winsock库
                     PostQuitMessage(0);
                     
break;
     
case WM_CREATE://初始化触发事件
                     WSAStartup(0x0202,&ws);
                     s1 
= socket(AF_INET,SOCK_DGRAM,0);
                     
//本地
                     Cs1A.sin_family = AF_INET;
                     Cs1A.sin_port 
= htons(Cs1Port);
                     Cs1A.sin_addr.s_addr 
= inet_addr(Cs1IP);
                     len 
= bind(s1,(struct sockaddr *)&Cs1A,sizeof(Cs1A));
                     
//远程
                     Cs2A.sin_family = AF_INET;
                     Cs2A.sin_port 
= htons(Cs2Port);
                     Cs2A.sin_addr.s_addr 
= inet_addr(Cs2IP);
                     WSAAsyncSelect(s1,hW,WM_USER
+1,FD_READ);//向Windows注册网络事件
                    
                     
break;

     
case WM_USER+1://socket触发事件
                    switch(LOWORD(IP))
                    
{
                      
case FD_READ: len = recv(s1,recvBuf,sizeof(recvBuf),0);
                                    recvBuf[len] 
= 0;
                                    MessageBox(
0,recvBuf,"UDP程序1从UDP程序2收到的数据",0);
                                    
break;
                    }

                    
break;
     
case WM_LBUTTONDOWN://点击鼠标左键
                       wsprintf(sendBuf,"Hello,UDO程序2!");
                       len 
= sizeof(Cs2A);
                       sendto(s1,sendBuf,strlen(sendBuf),
0,(struct sockaddr *)&Cs2A,len);
                       
break;
  }

  
return DefWindowProc(hW,msg,wP,IP);
}