VC++写的socket通信程序发送的信息用des加密其后在收到信息后解密
VC++写的socket通信程序发送的信息用des加密然后在收到信息后解密
我是菜鸟额
。]有一个简单的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);
我是菜鸟额
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);