VC++ UDP网络控制台程序
采用的是VC2008,控制台应用程序,使用UDP编写。
1、服务端代码
//UDPServer.cpp
#include <WinSock2.h>
#include <stdio.h> #define SERVERPORT 6000 //服务端口号 #pragma comment(lib, "WS2_32.lib") int main(int argc, char *argv[])
{
//加载套接字库
WORD wVersionRequested;
WSADATA wsaData;
int err; wVersionRequested = MAKEWORD( , ); err = WSAStartup( wVersionRequested, &wsaData );
if ( err != ) {
/* Tell the user that we could not find a usable */
/* WinSock DLL. */
return -;
} /* Confirm that the WinSock DLL supports 2.2.*/
/* Note that if the DLL supports versions greater */
/* than 2.2 in addition to 2.2, it will still return */
/* 2.2 in wVersion since that is the version we */
/* requested. */ if ( LOBYTE( wsaData.wVersion ) != ||
HIBYTE( wsaData.wVersion ) != ) {
/* Tell the user that we could not find a usable */
/* WinSock DLL. */
WSACleanup( );
return -;
} /* The WinSock DLL is acceptable. Proceed. */
//创建套接字
SOCKET sockServer = socket(AF_INET, SOCK_DGRAM, );
if (INVALID_SOCKET == sockServer)
{
printf("socket() called failed! The error code is: %d\n", WSAGetLastError());
return -;
}
else
{
printf("socket() called succesful!\n");
} //服务器端
SOCKADDR_IN addrServer;
addrServer.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
addrServer.sin_family = AF_INET;
addrServer.sin_port = htons(SERVERPORT); //绑定套接字
err = bind(sockServer, (SOCKADDR*)&addrServer, sizeof(SOCKADDR));
if (SOCKET_ERROR == err)
{
printf("bind() called failed! The error code is: %d\n", WSAGetLastError());
return -;
}
else
{
printf("bind() called successful!\n");
} //等待并接收数据
SOCKADDR_IN addrClient;//用于接收发送端的地址信息
int len = sizeof(SOCKADDR);
char recvBuf[];
recvfrom(sockServer, recvBuf, , , (SOCKADDR*)&addrClient, &len);
//打印接收到的数据
printf("receive data:%s from client [%s,%d]", recvBuf, inet_ntoa(addrClient.sin_addr), addrClient.sin_port); //关闭套接字
closesocket(sockServer); //终止套接字库的使用
WSACleanup(); return ;
}
2、客户端代码
//UDPClient.cpp
#include <WinSock2.h>
#include <stdio.h> #define SERVERPORT 6000 //服务端口号 #pragma comment(lib, "WS2_32.lib") int main(int argc, char *argv[])
{
//加载套接字库
WORD wVersionRequested;
WSADATA wsaData;
int err; wVersionRequested = MAKEWORD( , ); err = WSAStartup( wVersionRequested, &wsaData );
if ( err != ) {
/* Tell the user that we could not find a usable */
/* WinSock DLL. */
return -;
} /* Confirm that the WinSock DLL supports 2.2.*/
/* Note that if the DLL supports versions greater */
/* than 2.2 in addition to 2.2, it will still return */
/* 2.2 in wVersion since that is the version we */
/* requested. */ if ( LOBYTE( wsaData.wVersion ) != ||
HIBYTE( wsaData.wVersion ) != ) {
/* Tell the user that we could not find a usable */
/* WinSock DLL. */
WSACleanup( );
return -;
} //创建套接字
SOCKET sockClient = socket(AF_INET, SOCK_DGRAM, );
if (INVALID_SOCKET == sockClient)
{
printf("socket() called failed! The error code is: %d\n", WSAGetLastError());
return -;
}
else
{
printf("socket() called succesful!\n");
} SOCKADDR_IN addrServer;
addrServer.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
addrServer.sin_family = AF_INET;
addrServer.sin_port = htons(SERVERPORT); //发送数据
err = sendto(sockClient, "Hello", strlen("Hello")+, , (SOCKADDR*)&addrServer, sizeof(SOCKADDR));
if (SOCKET_ERROR == err)
{
printf("sendto() called failed! The error code is: %s\n", WSAGetLastError());
return -;
}
else
{
printf("sendto() called successful!\n");
} //关闭套接字
closesocket(sockClient); //终止套接字库的使用
WSACleanup(); return ;
}
注意:上面两部分代码中的
#pragma comment(lib, "WS2_32.lib")
可以删除,而改为设置程序属性,具体如下步骤:
server 和 client 都要"项目属性"--->"配置属性"----> "链接"----> "输入" --->"附加依赖项"中添加"ws2_32.lib"。
先启动服务端UDPServer程序,再启动客户端UDPClient程序,运行结果如下:
服务端UDPServer

客户端UDPClient

此时服务端UDPServer的结果会发生变化,会受到客户端发送过来的数据,如下图所示:

参考资料:
1、《VC++深入详解》 第14章网络编程 ,孙鑫主编
2、MSDN帮助文档
原文链接:VC++ UDP网络控制台程序
VC++ UDP网络控制台程序的更多相关文章
- VC++ TCP网络控制台程序
在Windows7系统下,采用工具为VS2008,Win32控制台应用程序,编写一个基于TCP的Client/Server网络程序. 1.服务器端代码 #include <WinSock2.h& ...
- VC无窗口控制台程序
VC无窗口控制台程序 #pragma comment(linker,"/subsystem:\"Windows\" /entry:\"mainCRTStartu ...
- UDP网络程序实例
根据前面所讲的网络编程的基础知识,以及UDP网络编程的特点,下面创建一个广播数据报程序.广播数据报是一种较新的技术,类似于电台广播,广播电台需要在指定的波段和频率上广播信息,收听者也要将收音机调到指定 ...
- UDP网络程序模型设计
UDP网络程序设计 1. UDP网络编程模型程序初始化 1.1服务器使用的函数 创建socket----->socket 绑定地址-------->bind 接受数据--------> ...
- udp网络程序-发送、接收数据
1. udp网络程序-发送数据 创建一个基于udp的网络程序流程很简单,具体步骤如下: 创建客户端套接字 发送/接收数据 关闭套接字 代码如下: #coding=utf-8from socket im ...
- VC++中的C运行时库浅析(控制台程序默认使用单线程的静态链接库,而MFC中的CFile类已暗藏了多线程)
1.概论 运行时库是程序在运行时所需要的库文件,通常运行时库是以LIB或DLL形式提供的.C运行时库诞生于20世纪70年代,当时的程序世界还很单纯,应用程序都是单线程的,多任务或多线程机制在此时还属于 ...
- 使用 acl 编写 UDP 网络程序(UDP 重传及可靠性机制)
在当今网络世界,虽然大部分网络应用都是基于 TCP 的,但有时 UDP 的网络通信也有用武之处.acl 的网络库中不仅提供了基于 TCP 的网络套接字流,同时也提供了 UDP 的网络库(目前 acl ...
- JAVA UDP网络编程学习笔记
一.UDP网络编程概述 采用TCP协议通信时,客户端的Socket必须先与服务器建立连接,连接建立成功后,服务器端也会持有客户端连接的Socket,客户端的Socket与服务器端的Socket是对应的 ...
- 【转】WIN32 控制台程序
http://blog.csdn.net/houmin0036/article/details/7702236 win32控制台项目指在32位Windows命令提示符(即所谓的dos)环境下运行的应用 ...
随机推荐
- 快速幂取模(POJ 1995)
http://poj.org/problem?id=1995 以这道题来分析一下快速幂取模 a^b%c(这就是著名的RSA公钥的加密方法),当a,b很大时,直接求解这个问题不太可能 利用公式a*b%c ...
- 创建一个Dribbble的作品展示
Most designers on dribbble have a personal portfolio website that usually consists of a name and a b ...
- 关于npm构建angular2项目问题
我在win10系统下用npm构建好angular2项目之后,在命令行下运行 ng serve --open,报一下错误: Unknown browser query 'basedir=$(dirnam ...
- 利用Metaweblog技术的API接口同步到多个博客网站(详细)
很早就有这个想法:自己有时候会用到多个博客,有些博客在一个网站上写完之后,要同步到其他博客网站,自己只能复制粘贴,感觉特别没意思,复制粘贴的麻木了.一直在想有哪些技术能实现一次写博,多站同步.最近网上 ...
- How To Secure Apache with Let's Encrypt on Ubuntu (Free SSL)
Introduction This tutorial will show you how to set up a TLS/SSL certificate from Let's Encrypt on a ...
- Vue.js双向绑定原理
Vue.js最核心的功能有两个,一个是响应式的数据绑定系统,另一个是组件系统.本文仅仅探究双向绑定是怎样实现的.先讲涉及的知识点,再用简化的代码实现一个简单的hello world示例. 一.访问器属 ...
- 关于Java Microbenchmark的一点记录
大家知道单元测试对代码质量的保障作用已经没什么可说的了.Microbenchmark(微基准测试)也是保证代码质量的重要手段,也是容易忽略的,它用来衡量一些小的代码片段的性能指标,完善的Microbe ...
- hibernate简单入门教程(一)---------基本配置
应用级别所以很粗浅 首先介绍一下hibernate框架: 1.优秀的持久化(通俗讲把内存上的短时间运行信息存储在持久化硬盘上)框架. 2.作用于持久层,因为没什么侵入性,所以同样适用于其他层面上的存储 ...
- javascript进行百度换肤 和显示隐藏一个窗口的操作
简单的运用javascript来进行百度换肤的操作 <!DOCTYPE html> <html lang="en"> <head> <me ...
- C# 方法与参数 常见命名空间汇总 using的使用 main方法参数
本文主要讲 C# 常见命名空间 using static 指令 && 调用静态方法 嵌套命名空间&&作用域 别名 Main() 方法 C# 常见命名空间 命名空间 作用 ...