VC++ UDP网络控制台程序
2017-12-11 13:55
453 查看
原文:http://blog.csdn.net/ccf19881030/article/details/16991215
我在server里面分别添加了发送,在clent添加了接收的部分附在最后面.
采用的是VC2008,控制台应用程序,使用UDP编写。
1、服务端代码
//UDPServer.cpp
[cpp] view
plain copy
#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( 2, 2 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
/* Tell the user that we could not find a usable */
/* WinSock DLL. */
return -1;
}
/* 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 ) != 2 ||
HIBYTE( wsaData.wVersion ) != 2 ) {
/* Tell the user that we could not find a usable */
/* WinSock DLL. */
WSACleanup( );
return -1;
}
/* The WinSock DLL is acceptable. Proceed. */
//创建套接字
SOCKET sockServer = socket(AF_INET, SOCK_DGRAM, 0);
if (INVALID_SOCKET == sockServer)
{
printf("socket() called failed! The error code is: %d\n", WSAGetLastError());
return -1;
}
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 -1;
}
else
{
printf("bind() called successful!\n");
}
//等待并接收数据
SOCKADDR_IN addrClient;//用于接收发送端的地址信息
int len = sizeof(SOCKADDR);
char recvBuf[100];
recvfrom(sockServer, recvBuf, 100, 0, (SOCKADDR*)&addrClient, &len);
//打印接收到的数据
printf("receive data:%s from client [%s,%d]", recvBuf, inet_ntoa(addrClient.sin_addr), addrClient.sin_port);
//关闭套接字
closesocket(sockServer);
//终止套接字库的使用
WSACleanup();
return 0;
}
2、客户端代码
//UDPClient.cpp
[cpp] view
plain copy
#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( 2, 2 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
/* Tell the user that we could not find a usable */
/* WinSock DLL. */
return -1;
}
/* 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 ) != 2 ||
HIBYTE( wsaData.wVersion ) != 2 ) {
/* Tell the user that we could not find a usable */
/* WinSock DLL. */
WSACleanup( );
return -1;
}
//创建套接字
SOCKET sockClient = socket(AF_INET, SOCK_DGRAM, 0);
if (INVALID_SOCKET == sockClient)
{
printf("socket() called failed! The error code is: %d\n", WSAGetLastError());
return -1;
}
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")+1, 0, (SOCKADDR*)&addrServer, sizeof(SOCKADDR));
if (SOCKET_ERROR == err)
{
printf("sendto() called failed! The error code is: %s\n", WSAGetLastError());
return -1;
}
else
{
printf("sendto() called successful!\n");
}
//关闭套接字
closesocket(sockClient);
//终止套接字库的使用
WSACleanup();
return 0;
}
先启动服务端UDPServer程序,再启动客户端UDPClient程序,运行结果如下:
服务端UDPServer
客户端UDPClient
此时服务端UDPServer的结果会发生变化,会受到客户端发送过来的数据,如下图所示:
参考资料:
1、《VC++深入详解》 第14章网络编程 ,孙鑫主编
2、MSDN帮助文档
clent端:
#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( 2, 2 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
/* Tell the user that we could not find a usable */
/* WinSock DLL. */
return -1;
}
/* 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 ) != 2 ||
HIBYTE( wsaData.wVersion ) != 2 ) {
/* Tell the user that we could not find a usable */
/* WinSock DLL. */
WSACleanup( );
return -1;
}
//创建套接字
SOCKET sockClient = socket(AF_INET, SOCK_DGRAM, 0);
if (INVALID_SOCKET == sockClient)
{
printf("socket() called failed! The error code is: %d\n", WSAGetLastError());
return -1;
}
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 server", strlen("Hello server")+1, 0, (SOCKADDR*)&addrServer, sizeof(SOCKADDR));
if (SOCKET_ERROR == err)
{
printf("sendto() called failed! The error code is: %s\n", WSAGetLastError());
return -1;
}
else
{
printf("sendto() called successful!\n");
}
int len = sizeof(SOCKADDR);
char recvBuf[100];
recvfrom(sockClient, recvBuf, 100, 0, (SOCKADDR*)&addrServer, &len);
//打印接收到的数据
printf("receive data:%s from client [%s,%d]", recvBuf, inet_ntoa(addrServer.sin_addr), addrServer.sin_port);
//关闭套接字
closesocket(sockClient);
//终止套接字库的使用
WSACleanup();
return 0;
}
我在server里面分别添加了发送,在clent添加了接收的部分附在最后面.
采用的是VC2008,控制台应用程序,使用UDP编写。
1、服务端代码
//UDPServer.cpp
[cpp] view
plain copy
#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( 2, 2 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
/* Tell the user that we could not find a usable */
/* WinSock DLL. */
return -1;
}
/* 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 ) != 2 ||
HIBYTE( wsaData.wVersion ) != 2 ) {
/* Tell the user that we could not find a usable */
/* WinSock DLL. */
WSACleanup( );
return -1;
}
/* The WinSock DLL is acceptable. Proceed. */
//创建套接字
SOCKET sockServer = socket(AF_INET, SOCK_DGRAM, 0);
if (INVALID_SOCKET == sockServer)
{
printf("socket() called failed! The error code is: %d\n", WSAGetLastError());
return -1;
}
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 -1;
}
else
{
printf("bind() called successful!\n");
}
//等待并接收数据
SOCKADDR_IN addrClient;//用于接收发送端的地址信息
int len = sizeof(SOCKADDR);
char recvBuf[100];
recvfrom(sockServer, recvBuf, 100, 0, (SOCKADDR*)&addrClient, &len);
//打印接收到的数据
printf("receive data:%s from client [%s,%d]", recvBuf, inet_ntoa(addrClient.sin_addr), addrClient.sin_port);
//关闭套接字
closesocket(sockServer);
//终止套接字库的使用
WSACleanup();
return 0;
}
2、客户端代码
//UDPClient.cpp
[cpp] view
plain copy
#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( 2, 2 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
/* Tell the user that we could not find a usable */
/* WinSock DLL. */
return -1;
}
/* 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 ) != 2 ||
HIBYTE( wsaData.wVersion ) != 2 ) {
/* Tell the user that we could not find a usable */
/* WinSock DLL. */
WSACleanup( );
return -1;
}
//创建套接字
SOCKET sockClient = socket(AF_INET, SOCK_DGRAM, 0);
if (INVALID_SOCKET == sockClient)
{
printf("socket() called failed! The error code is: %d\n", WSAGetLastError());
return -1;
}
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")+1, 0, (SOCKADDR*)&addrServer, sizeof(SOCKADDR));
if (SOCKET_ERROR == err)
{
printf("sendto() called failed! The error code is: %s\n", WSAGetLastError());
return -1;
}
else
{
printf("sendto() called successful!\n");
}
//关闭套接字
closesocket(sockClient);
//终止套接字库的使用
WSACleanup();
return 0;
}
先启动服务端UDPServer程序,再启动客户端UDPClient程序,运行结果如下:
服务端UDPServer
客户端UDPClient
此时服务端UDPServer的结果会发生变化,会受到客户端发送过来的数据,如下图所示:
参考资料:
1、《VC++深入详解》 第14章网络编程 ,孙鑫主编
2、MSDN帮助文档
#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( 2, 2 ); err = WSAStartup( wVersionRequested, &wsaData ); if ( err != 0 ) { /* Tell the user that we could not find a usable */ /* WinSock DLL. */ return -1; } /* 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 ) != 2 || HIBYTE( wsaData.wVersion ) != 2 ) { /* Tell the user that we could not find a usable */ /* WinSock DLL. */ WSACleanup( ); return -1; } /* The WinSock DLL is acceptable. Proceed. */ //创建套接字 SOCKET sockServer = socket(AF_INET, SOCK_DGRAM, 0); if (INVALID_SOCKET == sockServer) { printf("socket() called failed! The error code is: %d\n", WSAGetLastError()); return -1; } 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 -1; } else { printf("bind() called successful!\n"); } //等待并接收数据 SOCKADDR_IN addrClient;//用于接收发送端的地址信息 int len = sizeof(SOCKADDR); char recvBuf[100]; recvfrom(sockServer, recvBuf, 100, 0, (SOCKADDR*)&addrClient, &len); //打印接收到的数据 printf("receive data:%s from client [%s,%d]", recvBuf, inet_ntoa(addrClient.sin_addr), addrClient.sin_port); //发送数据 err = sendto(sockServer, "Hello Client", strlen("Hello Client")+1, 0, (SOCKADDR*)&addrClient, sizeof(SOCKADDR)); if (SOCKET_ERROR == err) { printf("sendto() called failed! The error code is: %s\n", WSAGetLastError()); return -1; } else { printf("sendto() called successful!\n"); } //关闭套接字 closesocket(sockServer); //终止套接字库的使用 WSACleanup(); return 0; }
clent端:
#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( 2, 2 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
/* Tell the user that we could not find a usable */
/* WinSock DLL. */
return -1;
}
/* 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 ) != 2 ||
HIBYTE( wsaData.wVersion ) != 2 ) {
/* Tell the user that we could not find a usable */
/* WinSock DLL. */
WSACleanup( );
return -1;
}
//创建套接字
SOCKET sockClient = socket(AF_INET, SOCK_DGRAM, 0);
if (INVALID_SOCKET == sockClient)
{
printf("socket() called failed! The error code is: %d\n", WSAGetLastError());
return -1;
}
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 server", strlen("Hello server")+1, 0, (SOCKADDR*)&addrServer, sizeof(SOCKADDR));
if (SOCKET_ERROR == err)
{
printf("sendto() called failed! The error code is: %s\n", WSAGetLastError());
return -1;
}
else
{
printf("sendto() called successful!\n");
}
int len = sizeof(SOCKADDR);
char recvBuf[100];
recvfrom(sockClient, recvBuf, 100, 0, (SOCKADDR*)&addrServer, &len);
//打印接收到的数据
printf("receive data:%s from client [%s,%d]", recvBuf, inet_ntoa(addrServer.sin_addr), addrServer.sin_port);
//关闭套接字
closesocket(sockClient);
//终止套接字库的使用
WSACleanup();
return 0;
}
相关文章推荐
- VC++ UDP网络控制台程序
- VC++ UDP网络控制台程序
- VC++ UDP网络控制台程序
- [精通WindowsSocket网络开发-基于VC++实现]第三章——WindowsSockets基础—TCP,UDP程序
- 黑马程序员_Java基础_网络编程_UDP传输协议编程,控制台聊天程序
- VC++ TCP网络控制台程序
- VC++ TCP网络控制台程序
- [精通WindowsSocket网络开发-基于VC++实现]第三章——WindowsSockets基础—TCP,UDP程序
- udp网络聊天控制台程序
- [精通WindowsSocket网络开发-基于VC++实现]第三章——WindowsSockets基础—TCP,UDP程序 .
- [VC++]控制台程序窗口隐藏(网络转载)
- [精通WindowsSocket网络开发-基于VC++实现]第三章——WindowsSockets基础—TCP,UDP程序
- VC++ TCP网络控制台程序
- VC环境下window网络程序:UDP Socket程序
- [精通WindowsSocket网络开发-基于VC++实现]第三章——WindowsSockets基础—TCP,UDP程序
- VC++ 基于UDP的控制台聊天程序socket通信
- VC Console(控制台)程序如何隐藏CMD窗口
- 一个简单的 UDP网络程序
- 使用 acl 编写 UDP 网络程序(UDP 重传及可靠性机制)
- 基于Udp的Socket网络编程聊天程序