Click here to Skip to main content
15,922,533 members
Home / Discussions / C / C++ / MFC
   

C / C++ / MFC

 
GeneralRe: need help Pin
Antti Keskinen8-Jan-04 0:16
Antti Keskinen8-Jan-04 0:16 
QuestionHow to create patch for program update? Pin
Ming Yan7-Jan-04 21:31
Ming Yan7-Jan-04 21:31 
AnswerRe: How to create patch for program update? Pin
Antti Keskinen7-Jan-04 21:38
Antti Keskinen7-Jan-04 21:38 
GeneralRe: How to create patch for program update? Pin
Ming Yan7-Jan-04 22:21
Ming Yan7-Jan-04 22:21 
GeneralRe: How to create patch for program update? Pin
Antti Keskinen8-Jan-04 0:11
Antti Keskinen8-Jan-04 0:11 
GeneralRe: How to create patch for program update? Pin
Ming Yan8-Jan-04 14:52
Ming Yan8-Jan-04 14:52 
Generalcreating toolbar window(MFC) Pin
grunt1237-Jan-04 21:08
grunt1237-Jan-04 21:08 
Questioncan u modify this proxy program,thank u . Pin
tujj997-Jan-04 20:58
tujj997-Jan-04 20:58 
/*********************************************************************/
/***************WINDOWS SOCKET代理服务器******************************/
/***************Email:tujj99@hotmail.com******************************/
/***************程序还有很多问题,欢迎讨论****************************/
/*********************************************************************/
#include <winsock2.h>
//#include <windows.h>
#include <stdio.h>
//#include <conio.h>

#define SERVER_PORT 4040 /*服务端口 */
#define PROXY_PORT 8080
#define MSG_SIZE 8192 /*缓冲区的大小 */
#define MAX_THREAD 1000
//#define SERVER_NAME_MAX_SIZE 256
#define BACKLOG 5 /*等待服务的最大数*/

char server_addr[]="172.17.1.39";
char proxy_addr[]="130.1.201.81";
int server_port = SERVER_PORT;
int proxy_port = PROXY_PORT;
int thread_no;
struct sockaddr_in pro_addr;
SOCKET hostserver;
unsigned long thID;

typedef struct tClientIP_
{
char ip[16];
unsigned short port;
SOCKET cli_socket;
int reserve;
}tClientIP;

/****************************************************************/
/* NAME : InitServer */
/* IN : NULL */
/* OUT : 1/0 Success/Failure */
/* Sumary: 初始化服务器 */
/****************************************************************/
int InitServer()
{
struct sockaddr_in ser_addr; /* 服务器的地址 */
WSADATA WSAData;
int addrlen,errorno;
thread_no = 0;
//init WSA
if(WSAStartup(MAKEWORD(2,2),&WSAData)){
printf("WSA start error!");
return -1;
}


/*创建连接的SOCKET */
hostserver = socket(AF_INET,SOCK_STREAM,0);
if(hostserver == INVALID_SOCKET){/*创建失败 */
errorno = WSAGetLastError();
printf("socker Error:%d\n",errorno);
WSACleanup();
return -1;
}
else{
// printf("Server socket creating successfully!\n");
}

/*初始化服务器地址*/
addrlen=sizeof(struct sockaddr_in);
ZeroMemory(&ser_addr,addrlen);
ser_addr.sin_family=AF_INET;
ser_addr.sin_addr.s_addr=htonl(INADDR_ANY); //任何主机都可以访问
ser_addr.sin_port=htons(server_port);
if(bind(hostserver,(struct sockaddr *)&ser_addr,sizeof(ser_addr)) == SOCKET_ERROR){/*绑定失败 */
errorno = WSAGetLastError();
printf("Bind Error:%d\n",errorno);
closesocket(hostserver);
WSACleanup();
return -1;
}
else{
printf("bind socket to successfully!\n");
}

/*侦听客户端请求*/
if(listen(hostserver,SOMAXCONN) == SOCKET_ERROR ){
errorno = WSAGetLastError();
printf("Listen Error:%d\n",errorno);
closesocket(hostserver);
WSACleanup();
return -1;
}
else{
printf("Start listening on %s:%d....\n",server_addr,server_port);
}

/* 初始化代理服务器地址*/
addrlen=sizeof(struct sockaddr_in);
ZeroMemory(&pro_addr,addrlen);
pro_addr.sin_family=AF_INET;
pro_addr.sin_addr.s_addr=inet_addr(proxy_addr);
pro_addr.sin_port=htons(proxy_port);

return 0;
}

/*****************************************************************/
/* NAME : ServerThread */
/* IN : LPVOID lpParam */
/* OUT : DWORD */
/* Sumary: 服务器接受一条消息,然后发送到代理server, */
/* 再接收从代理server返回的数据,再送往client */
/*****************************************************************/
DWORD WINAPI ServerThread(LPVOID lpParam)
{
int n; /* 接受到的或发送的数据的字节数*/
// ret; /* select()返回值 */
char msg[MSG_SIZE]; /* 缓冲区*/
SOCKET cli_socket, /* 客户端SOCKET */
pro_socket; /* Proxy SOCKET */
tClientIP ClientIP;
int errorno;
// fd_set fdread;
// fd_set fdwrite;

ClientIP = *(reinterpret_cast<tclientip *="">(lpParam));
cli_socket = ClientIP.cli_socket;

if(cli_socket == INVALID_SOCKET)
{
printf("client socket error!\n");
ExitThread(0);
}
/* 客户端IP+端口 */
//printf("Request from %s:%d\n",inet_ntoa(cli_addr.sin_addr),ntohs(cli_addr.sin_port));
printf("begin thread %d....\n",GetCurrentThreadId());

/* 创建一个新Proxy socket */
pro_socket = socket(AF_INET,SOCK_STREAM,0);
if(pro_socket == INVALID_SOCKET){/*创建失败 */
errorno = WSAGetLastError();
printf("socker Error:%d\n",errorno);
thread_no --;
closesocket(cli_socket);
ExitThread(0);
}
else{
//printf("Proxy socket:%d creating successfully!\n",pro_socket);
}

int t = 2000;
if(setsockopt(pro_socket, SOL_SOCKET, SO_RCVTIMEO, (char *)&t, sizeof(t)) == SOCKET_ERROR)
{
errorno = WSAGetLastError();
printf("Set socket option Error:%d\n",errorno);
}

/* 请求连接代理服务器 */
if(connect(pro_socket,(struct sockaddr *)&pro_addr,sizeof(pro_addr)) == SOCKET_ERROR){
errorno = WSAGetLastError();
printf("Listen Error:%d\n",errorno);
thread_no --;
closesocket(pro_socket);
closesocket(cli_socket);
ExitThread(0);
}

// FD_ZERO(&fdread);
// FD_SET(cli_socket, &fdread);
// ret =select(NULL, &fdread, NULL, NULL, NULL);
// if(ret == SOCKET_ERROR)
// {
// printf("select error!%d\n",WSAGetLastError());
// closesocket(cli_socket);
// ExitThread(0);
// }
// if(FD_ISSET(cli_socket, &fdread)) {
while(1)
{
/* 接收客户端消息 */
ZeroMemory(msg,sizeof(msg));
n = recv(cli_socket,msg,MSG_SIZE,0);
if( n > 0){
printf("[%d]:C[%-16s:%-5d] >> S[%-16s:%-5d] [%d]\n",
GetCurrentThreadId(),ClientIP.ip,ClientIP.port,server_addr,server_port,n);
}
else if(n == 0) {
printf("client connection closed!\n");
break;
}
else if(n == SOCKET_ERROR){
errorno = WSAGetLastError();
printf("client socket closed or error:%d\n",errorno);
break;
}
// }

// FD_ZERO(&fdwrite);
// FD_SET(pro_socket, &fdwrite);
// ret = select(NULL, NULL, &fdwrite, NULL, NULL);
// if(ret == SOCKET_ERROR)
// {
// printf("select error!%d\n",WSAGetLastError());
// closesocket(cli_socket);
// ExitThread(0);
// }
// if(FD_ISSET(pro_socket, &fdwrite)) {
/* 转发消息到代理服务器*/
n = send(pro_socket,msg,n,0);
if( n > 0) {
// printf("[%d]:To Proxy ----> [%d]\n",GetCurrentThreadId(),n);
printf("[%d]:S[%-16s:%-5d] >> P[%-16s:%-5d] [%d]\n",
GetCurrentThreadId(),server_addr,server_port,proxy_addr,proxy_port,n);
}
else if(n == SOCKET_ERROR) {
errorno = WSAGetLastError();
printf("SEND TO PROXY ERROR:%d\n",errorno);
break;
}
// }
while(1)
{
// FD_ZERO(&fdread);
// FD_SET(pro_socket, &fdread);
// ret = select(NULL, &fdread, NULL, NULL, NULL);
// if(ret == SOCKET_ERROR)
// {
// printf("select error!%d\n",WSAGetLastError());
// closesocket(cli_socket);
// ExitThread(0);
// }
// if(FD_ISSET(pro_socket, &fdread)) {
/* 从代理服务器接收消息*/
ZeroMemory(msg,sizeof(msg));
n = recv(pro_socket,msg,MSG_SIZE,0);
if( n > 0){
// printf("[%d]:From Proxy <---- [%d]\n",GetCurrentThreadId(),n);
printf("[%d]:S[%-16s:%-5d] << P[%-16s:%-5d] [%d]\n",
GetCurrentThreadId(),server_addr,server_port,proxy_addr,proxy_port,n);
}
else if(n == 0) {
break;
}
else if(n == SOCKET_ERROR){
errorno = WSAGetLastError();
printf("client socket closed or error:%d\n",errorno);
break;
}
// }

// FD_ZERO(&fdwrite);
// FD_SET(cli_socket, &fdwrite);
// ret = select(NULL, NULL, &fdwrite, NULL, NULL);
// if(ret == SOCKET_ERROR)
// {
// printf("select error!%d\n",WSAGetLastError());
// closesocket(cli_socket);
// ExitThread(0);
// }
// if(FD_ISSET(cli_socket, &fdwrite)) {
/* 返回数据给客户端 */
n = send(cli_socket,msg,n,0);
if( n > 0){
// printf("[%d]:To Client ----> [%d]\n",GetCurrentThreadId(),n);
printf("[%d]:C[%-16s:%-5d] << S[%-16s:%-5d] [%d]\n",
GetCurrentThreadId(),ClientIP.ip,ClientIP.port,server_addr,server_port,n);
}
else if(n == SOCKET_ERROR){
errorno = WSAGetLastError();
printf("client socket closed or error:%d\n",errorno);
break;
}
}
}
closesocket(pro_socket);
closesocket(cli_socket);
thread_no --;
printf("exit thread [%d]....\n",GetCurrentThreadId());
return 1;
}

/*****************************************************************/
/* NAME : ListenThread */
/* IN : LPVOID lpParam */
/* OUT : DWORD */
/* Sumary: 处理客户请求的线程 */
/*****************************************************************/
DWORD WINAPI ListenThread(LPVOID lpParam)
{
int addrlen,errorno;
HANDLE hThread[MAX_THREAD];
SOCKET client; /* 客户端SOCKET */
struct sockaddr_in cli_addr; /* 客户端的地址 */
tClientIP ClientIP;

addrlen = sizeof(cli_addr);
while(1)
{
ZeroMemory(&cli_addr,sizeof(cli_addr));
/* 等待接收客户连接请求 */
client = accept(hostserver,(struct sockaddr*)&cli_addr,&addrlen);
/* 获取客户端临时端口 */
strcpy(ClientIP.ip , inet_ntoa(cli_addr.sin_addr));
ClientIP.port = cli_addr.sin_port;
ClientIP.cli_socket = client;
/* 开启服务线程 */
hThread[thread_no] = CreateThread(
NULL, //缺省的安全性
0, //缺省的堆栈
ServerThread, //线程入口
reinterpret_cast<lpvoid>(&ClientIP), //客户端socket
0, //无特殊创建标志
&thID); //返回线程的ID
if(hThread[thread_no] == NULL){
errorno = WSAGetLastError();
printf("thread create error! %d\n",errorno);
closesocket(ClientIP.cli_socket);
}
else{
thread_no++;
}
}
}

/****************************************************************/
/* NAME : main */
/* IN : NULL */
/* OUT : NULL */
/* Sumary: 入口程序(创建监听线程) */
/****************************************************************/
void main()
{
HANDLE hListen;
int errorno;
/* 初始化服务器 */
if(InitServer() < 0){
/* 初始化失败 */
errorno = GetLastError();
printf("Init error:%d",errorno);
ExitProcess(0);
}

/* 创建监听线程 */
hListen = CreateThread(
NULL, //缺省的安全性
0, //缺省的堆栈
ListenThread, //监听线程入口
NULL, //
0, //无特殊创建标志
&thID); //返回线程的ID
if(hListen = NULL)
{
/* 创建线程失败 */
errorno = WSAGetLastError();
printf("thread create error! %d\n",errorno);
WSACleanup();
ExitProcess(0);
}
// ::WaitForSingleObject(hListen,INFINITE);
Sleep(999999);
closesocket(hostserver);
WSACleanup();
}

////////////////////////////////////////////////////////////////////////////
//lots of problems , can u ?
////////////////////////////////////////////////////////////////////////////
Generallookup problem, pcap.h Pin
styve7-Jan-04 20:36
styve7-Jan-04 20:36 
GeneralRe: lookup problem, pcap.h Pin
Antti Keskinen7-Jan-04 21:41
Antti Keskinen7-Jan-04 21:41 
GeneralRe: lookup problem, pcap.h Pin
Mike Dimmick8-Jan-04 0:59
Mike Dimmick8-Jan-04 0:59 
Generalwrite into another app Edit Box Pin
SiddharthAtw7-Jan-04 20:14
SiddharthAtw7-Jan-04 20:14 
GeneralRe: write into another app Edit Box Pin
jhwurmbach7-Jan-04 20:27
jhwurmbach7-Jan-04 20:27 
Generalpreventing the user from closing a floating toolbar Pin
Hin Jang7-Jan-04 20:02
Hin Jang7-Jan-04 20:02 
GeneralRe: preventing the user from closing a floating toolbar Pin
Roger Allen8-Jan-04 3:18
Roger Allen8-Jan-04 3:18 
GeneralRe: preventing the user from closing a floating toolbar Pin
Hin Jang8-Jan-04 9:18
Hin Jang8-Jan-04 9:18 
GeneralWindow Login and keybd_event Pin
Member 8017697-Jan-04 19:52
Member 8017697-Jan-04 19:52 
GeneralRe: Window Login and keybd_event Pin
Mike Dimmick8-Jan-04 1:12
Mike Dimmick8-Jan-04 1:12 
GeneralRe: Window Login and keybd_event Pin
Member 8017698-Jan-04 17:28
Member 8017698-Jan-04 17:28 
GeneralHTTP Request Pin
murali_utr7-Jan-04 19:37
murali_utr7-Jan-04 19:37 
GeneralRe: HTTP Request Pin
Alexander M.,8-Jan-04 8:17
Alexander M.,8-Jan-04 8:17 
GeneralABrower Plugin Pin
Abhi Lahare7-Jan-04 18:11
Abhi Lahare7-Jan-04 18:11 
GeneralRe: ABrower Plugin Pin
bryce7-Jan-04 18:22
bryce7-Jan-04 18:22 
GeneralLogin using my application Pin
SiddharthAtw7-Jan-04 18:05
SiddharthAtw7-Jan-04 18:05 
GeneralRe: Login using my application Pin
bryce7-Jan-04 18:20
bryce7-Jan-04 18:20 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.