主题:基于用户数据报协议UDP的程序实例
//程序说明:基于用户数据报协议UDP的程序实例
//程序功能:在窗口中点击鼠标左键,则发送信息到端口号为6000的远程机上,并可以从该远程机接收数据
#include <WINSOCK.H>
#include <iostream>
////////////////////////////////////
//说明全局变量
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
hInst = hI;
WNDCLASS wndC;
memset(&wndC, 0, sizeof(WNDCLASS));
wndC.lpfnWndProc = (WNDPROC)WndProc;
wndC.hInstance = hI;
wndC.hIcon = LoadIcon(NULL,IDI_APPLICATION);
wndC.hbrBackground = (HBRUSH)COLOR_WINDOW;
wndC.lpszClassName = "W1";
RegisterClass(&wndC);
hWnd = CreateWindowEx(WS_EX_PALETTEWINDOW,"W1","UDP程序1[端口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 8000 //本地端口号
#define Cs2Port 6000 //远程端口号
#define Cs1IP "127.0.0.1" //本地IP地址
#define Cs2IP "127.0.0.1" //远程IP地址
//////////////////////////////////////
//消息处理
LRESULT CALLBACK WndProc(HWND hW,UINT msg,WPARAM wP,LPARAM lP)
{
switch(msg) {
case WM_DESTROY: //关闭程序触发事件
//向Windows注销Socket触发事件
//释放连接
//卸载动态链接库Winsock DLL
PostQuitMessage(0);
break;
case WM_CREATE: //初始化触发事件
//装载动态链接库Winsock DLL
//TODO...
break;
case WM_USER/*a user defined message*/:
switch(LOWORD(lP)) {
case FD_READ:
//TODO:
MessageBox(0,recvBuf,"UDP程序1从UDP程序2收到的数据",MB_OK);
break;
}
break;
case WM_LBUTTONDOWN:
//TODO:
break;
}
return DefWindowProc(hW,msg,wP,lP);
}
//程序功能:在窗口中点击鼠标左键,则发送信息到端口号为6000的远程机上,并可以从该远程机接收数据
#include <WINSOCK.H>
#include <iostream>
////////////////////////////////////
//说明全局变量
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
hInst = hI;
WNDCLASS wndC;
memset(&wndC, 0, sizeof(WNDCLASS));
wndC.lpfnWndProc = (WNDPROC)WndProc;
wndC.hInstance = hI;
wndC.hIcon = LoadIcon(NULL,IDI_APPLICATION);
wndC.hbrBackground = (HBRUSH)COLOR_WINDOW;
wndC.lpszClassName = "W1";
RegisterClass(&wndC);
hWnd = CreateWindowEx(WS_EX_PALETTEWINDOW,"W1","UDP程序1[端口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 8000 //本地端口号
#define Cs2Port 6000 //远程端口号
#define Cs1IP "127.0.0.1" //本地IP地址
#define Cs2IP "127.0.0.1" //远程IP地址
//////////////////////////////////////
//消息处理
LRESULT CALLBACK WndProc(HWND hW,UINT msg,WPARAM wP,LPARAM lP)
{
switch(msg) {
case WM_DESTROY: //关闭程序触发事件
//向Windows注销Socket触发事件
//释放连接
//卸载动态链接库Winsock DLL
PostQuitMessage(0);
break;
case WM_CREATE: //初始化触发事件
//装载动态链接库Winsock DLL
//TODO...
break;
case WM_USER/*a user defined message*/:
switch(LOWORD(lP)) {
case FD_READ:
//TODO:
MessageBox(0,recvBuf,"UDP程序1从UDP程序2收到的数据",MB_OK);
break;
}
break;
case WM_LBUTTONDOWN:
//TODO:
break;
}
return DefWindowProc(hW,msg,wP,lP);
}