?? tcpclient.cpp
字號:
#include <Winsock2.h>
#include <stdio.h>
struct rc4_state
{
int x, y, m[256];
};
void rc4_setup( struct rc4_state *s, unsigned char *key, int length );
void rc4_crypt( struct rc4_state *s, unsigned char *data, int length );
void main()
{
struct rc4_state s;
unsigned char key[]={0x01,0x02,0x03,0x04,0x05,0x06};//種子密鑰
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 1, 1 );//版本號1.1
//1.加載套接字庫
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
return; }//endof if
//判斷是否我們請求的winsocket版本,如果不是
//則調用WSACleanup終止winsocket的使用并返回
if ( LOBYTE( wsaData.wVersion ) != 1 ||
HIBYTE( wsaData.wVersion ) != 1 ) {
WSACleanup( );
return; }///endof if
//2.創建套接字
SOCKET sockClient = socket (AF_INET, SOCK_STREAM, 0);
//3.連接服務器端,無須綁定
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr = inet_addr("222.28.142.146");
//設定服務器端IP地址,"127.0.0.1"是本地回路地址
//不管本地主機上有沒有網卡,都可以用這個IP測試網絡
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(6000); //端口號要與服務器端保持一致
connect(sockClient,(SOCKADDR *)&addrSrv,sizeof(SOCKADDR));
//4.接收服務器端發送的數據,并且向服務器端發送數據
char recvBuf[100];
recv(sockClient,recvBuf,100,0);
rc4_setup( &s, key, sizeof(key) );//生成加密子密鑰序列
rc4_crypt( &s,(unsigned char *)recvBuf,sizeof(recvBuf));//用加密子密鑰序列解密數據
printf("%s \n", recvBuf);
char sendBuf[100];
sprintf(sendBuf,"I'm teshore");
rc4_setup( &s, key, sizeof(key) );//生成加密子密鑰序列
rc4_crypt( &s,(unsigned char *)sendBuf,sizeof(sendBuf));//用加密子密鑰序列解密數據
send(sockClient,sendBuf,strlen(sendBuf)+1,0);
//5.關閉套接字,釋放資源,并且終止對套接字庫的使用
closesocket(sockClient);
WSACleanup();
}//endof main()
//函數功能:由給定的種子密鑰生成子密鑰
void rc4_setup( struct rc4_state *s, unsigned char *key, int length )
{
int i, j, k, *m, a;
s->x = 0;
s->y = 0;
m = s->m;
for( i = 0; i < 256; i++ )
{
m[i] = i;
}
j = k = 0;
for( i = 0; i < 256; i++ )
{
a = m[i];
j = (unsigned char) ( j + a + key[k] );
m[i] = m[j]; m[j] = a;
if( ++k >= length ) k = 0;
}
}
//函數功能:由生成的子密鑰加解密數據
void rc4_crypt( struct rc4_state *s, unsigned char *data, int length )
{
int i, x, y, *m, a, b;
x = s->x;
y = s->y;
m = s->m;
for( i = 0; i < length; i++ )
{
x = (unsigned char) ( x + 1 ); a = m[x];
y = (unsigned char) ( y + a );
m[x] = b = m[y];
m[y] = a;
data[i] ^= m[(unsigned char) ( a + b )];
}
s->x = x;
s->y = y;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -