VC++写的socket通信程序发送的信息用des加密然后在收到信息后解密

ZuoQiaQiaYin ZuoQiaQiaYin 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我是菜鸟额。]有一个简单的VC++写的socket通信程序,如何将发送的信息用des加密然后在收到信息后解密。求大神给个说明和des代码。
scoket服务器和客户端代码如下,如何加入des模块:
服务器端程序:

//sockServ.cpp
#include <iostream>
#include <Windows.h>
#pragma comment(lib, "WS2_32") // 链接到WS2_32.lib
using namespace std;

#define PORT 4000
//#define IP_ADDRESS "192.168.1.145"
#define IP_ADDRESS "127.0.0.1"

DWORD WINAPI ClientThread(LPVOID lpParameter)
{
SOCKET CientSocket = (SOCKET)lpParameter;
int Ret = 0;
char RecvBuffer[MAX_PATH];
char SendBuffer[MAX_PATH];

while ( true )
{
memset(RecvBuffer, 0x00, sizeof(RecvBuffer));
Ret = recv(CientSocket, RecvBuffer, MAX_PATH, 0);
if ( Ret == 0 || Ret == SOCKET_ERROR )
{
cout<<"客户端退出!"<<endl;
break;
}
cout<<"接收到客户信息为:"<<RecvBuffer<<endl;
//服务器端发送信息
cout<<"服务器端向客户端发送!:"<<endl;
cin.getline(SendBuffer, sizeof(SendBuffer));
Ret = send(CientSocket, SendBuffer, (int)strlen(SendBuffer), 0);
if ( Ret == SOCKET_ERROR )
{
cout<<"Send Info Error::"<<GetLastError()<<endl;
break;
}
}
return 0;
}

int main(int argc, char* argv[])
{
WSADATA Ws;
SOCKET ServerSocket, CientSocket;
struct sockaddr_in LocalAddr, ClientAddr;//sockaddr_in是TCP/IP使用的数据结构
int Ret = 0;
int AddrLen = 0;
HANDLE hThread = NULL;

//Init Windows Socket
if ( WSAStartup(MAKEWORD(2,2), &Ws) != 0 )//socket使用2.2版本的
{
cout<<"Init Windows Socket Failed::"<<GetLastError()<<endl;
return -1;
}

ServerSocket = socket(AF_INET, SOCK_STREAM, 0);
//ServerSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if ( ServerSocket == INVALID_SOCKET )
{
cout<<"Create Socket Failed::"<<GetLastError()<<endl;
return -1;
}

LocalAddr.sin_family = AF_INET;//INTERNET协议簇
//LocalAddr.sin_addr.s_addr = inet_addr(IP_ADDRESS);
LocalAddr.sin_addr.S_un.S_addr = INADDR_ANY;
LocalAddr.sin_port = htons(PORT);
memset(LocalAddr.sin_zero, 0x00, 8);

//Bind Socket
Ret = bind(ServerSocket, (struct sockaddr*)&LocalAddr, sizeof(LocalAddr));
if ( Ret != 0 )
{
cout<<"Bind Socket Failed::"<<GetLastError()<<endl;
return -1;
}

Ret = listen(ServerSocket, 10);//用ServerSocket来进行监听,监听最多10个客户端的请求
if ( Ret != 0 )
{
cout<<"listen Socket Failed::"<<GetLastError()<<endl;
return -1;
}

cout<<"服务端已经启动"<<endl;
while ( true )//因为是服务器端,要不停的监听客户端的请求
{
AddrLen = sizeof(ClientAddr);
//用CientSocket来进行通信
CientSocket = accept(ServerSocket, (struct sockaddr*)&ClientAddr, &AddrLen);
if ( CientSocket == INVALID_SOCKET )
{
cout<<"Accept Failed::"<<GetLastError()<<endl;
break;
}

cout<<"客户端连接::"<<inet_ntoa(ClientAddr.sin_addr)<<":"<<ClientAddr.sin_port<<endl;

hThread = CreateThread(NULL, 0, ClientThread, (LPVOID)CientSocket, 0, NULL);
if ( hThread == NULL )
{
cout<<"Create Thread Failed!"<<endl;
break;
}
CloseHandle(hThread);
}

closesocket(ServerSocket);
closesocket(CientSocket);
WSACleanup();

return 0;
}
客户端代码如下:
//sockCli.cpp
#include <iostream>
#include <Windows.h>
using namespace std;
#pragma comment(lib, "WS2_32") // 链接到WS2_32.lib

#define PORT 4000
//#define IP_ADDRESS "192.168.1.145"
#define IP_ADDRESS "127.0.0.1"

int main(int argc, char* argv[])
{
WSADATA Ws;
SOCKET CientSocket;
struct sockaddr_in ServerAddr;
int Ret = 0;
int AddrLen = 0;
HANDLE hThread = NULL;
char SendBuffer[MAX_PATH];
char RecvBuffer[MAX_PATH];

//Init Windows Socket
if ( WSAStartup(MAKEWORD(1,1), &Ws) != 0 )//客户端用的SOCKET库的版本和服务器端一样,就算不一样,也可以正常通信
{
cout<<"Init Windows Socket Failed::"<<GetLastError()<<endl;
return -1;
}

//Create Socket
CientSocket = socket(AF_INET, SOCK_STREAM, 0);//创建了一个客户端的SOCKET
if ( CientSocket == INVALID_SOCKET )
{
cout<<"Create Socket Failed::"<<GetLastError()<<endl;
return -1;
}

ServerAddr.sin_family = AF_INET;
ServerAddr.sin_addr.s_addr = inet_addr(IP_ADDRESS);
ServerAddr.sin_port = htons(PORT);
memset(ServerAddr.sin_zero, 0x00, 8);
//连接到服务器,连接的服务器的地址在上面中设定
Ret = connect(CientSocket,(struct sockaddr*)&ServerAddr, sizeof(ServerAddr));
if ( Ret == SOCKET_ERROR )
{
cout<<"Connect Error::"<<GetLastError()<<endl;
return -1;
}
else
{
cout<<"连接成功!"<<endl;
}

while ( true )
{
cout<<"客户端,发送!:"<<endl;
cin.getline(SendBuffer, sizeof(SendBuffer));
//向服务器端发送数据
Ret = send(CientSocket, SendBuffer, (int)strlen(SendBuffer), 0);
if ( Ret == SOCKET_ERROR )
{
cout<<"Send Info Error::"<<GetLastError()<<endl;
break;
}
memset(RecvBuffer, 0x00, sizeof(RecvBuffer));
//从服务器端接收数据
Ret = recv(CientSocket, RecvBuffer, MAX_PATH, 0);
if ( Ret == 0 || Ret == SOCKET_ERROR )
{
cout<<"客户端退出!"<<endl;
break;
}
cout<<"接收到服务器信息为:"<<RecvBuffer<<endl;
}
closesocket(CientSocket);
WSACleanup();
return 0;
}
...全文

相关推荐

基于DES加解密的Socket聊天程序代码

本文介绍了一个基于Java的DES加密解密工具类,实现了生成密钥、字符串加密解密等功能,并构建了一个简单的聊天程序,包括客户端和服务器端。客户端支持消息的发送和接收,服务器端负责处理连接请求和消息加密

littlehu321

深入解析OpenSSL动态库:从libcrypto与libssl原理到Windows部署实践

动态链接库(DLL)是Windows系统中实现代码复用与模块化的重要机制,其通过动态加载与链接,为应用程序提供共享功能模块。在网络安全领域,SSL/TLS协议是保障数据传输安全的基石,而OpenSSL作为其广泛使用的开源实现,其核心功能由libcrypto与libssl两个关键动态库承载。libcrypto作为加密算法基础库,提供了对称加密、非对称加密、哈希函数等密码学原语;libssl则在此基础上实现了完整的SSL/TLS协议栈,负责安全通信的握手与会话管理。理解这两个库的职责边界与协作原理,对于解决因版

weixin_33674976

Socket通信Des加密笔记

1.3 Socket通信及Des之CBC加密解密完整源码:源码通常包括服务器端和服务客户端的Java代码,分别实现Socket连接的建立、数据加密解密、接收发送数据等功能。

知道就是你

C# Socket传输加密文件并解密(WinForm版)

这是我用C#编写的基于Socket网络编程技术,在网络上传输加密文件,并对其进行数字签名,在另一端进行解密,并验证签名的一个WinForm程序,里面涉及到的加密解密算法有对称密码算法DES和非对称密码

修炼时代

基于客户端通信的DES加密的java实现

在DES加密的客户端通信中,我们需要在数据发送前对其进行加密,并在接收后进行解密。以下是一般的步骤:1. **密钥生成**:在客户端和服务器端,我们都需要生成相同的DES密钥。

justforfun099
评论 2
收藏 已收藏
分享
返回顶部
ZuoQiaQiaYin
C++ 语言 65,214 成员 250,514 内容