• 大小: 23KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-07-03
  • 语言: 其他
  • 标签: socket5  

资源简介

基于Socket5的服务器端源代码,适合初学者

资源截图

代码片段和文件信息

// MySocks5.cpp : Defines the entry point for the console application.
//
#include “stdafx.h“
#include “MySocks5.h“
#include “afxsock.h“


#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// The one and only application object
#define HTTP  “http://“
#define FTP   “ftp://“
#define MAXBUFFERSIZE      20*1024      //缓冲区大小

CWinApp theApp;
using namespace std;

//Proxy 端口
UINT pport=1180;
UINT ProxyToServer(LPVOID pParam);
UINT UserToProxy(LPVOID pParam);

struct ProxySockets
{
    SOCKET  user_proxy; //本地机器到PROXY 服务机的socket
SOCKET  proxy_server; //PROXY 服务机到远程主机的socket
BOOL    IsUser_ProxyClosed; // 本地机器到PROXY 服务机状态
BOOL    IsProxy_ServerClosed; // PROXY 服务机到远程主机状态
};

struct ProxyParam
{
char Address[256];    // 远程主机地址
HANDLE User_SvrOK;    // PROXY 服务机到远程主机的联结状态
ProxySockets *pPair;    // 维护一组SOCKET的指针
int     Port;         // 用来联结远程主机的端口
};                   //这个结构用来PROXY SERVER与远程主机的信息交换.
SOCKET    listen_socket;   //用来侦听的SOCKET。

int StartProxyServer()  //启动服务
{
     WSADATA wsaData;
     sockaddr_in local;
     SOCKET listen_socket;
     if(::WSAStartup(0x202&wsaData)!=0)
     {
           printf(“\nError in Startup session.\n“);WSACleanup();
           return -1;
     }
     local.sin_family=AF_INET;
     local.sin_addr.s_addr=INADDR_ANY;
     local.sin_port=htons(pport);
     listen_socket=socket(AF_INETSOCK_STREAM0);
     if(listen_socket==INVALID_SOCKET)
     {
printf(“\nError in New a Socket.“);WSACleanup();
return -2;
     }
     if(::bind(listen_socket(sockaddr *)&localsizeof(local))!=0)
     {
printf(“\n Error in Binding socket.“);
WSACleanup();
return -3;
     }
if(::listen(listen_socket5)!=0)
{
printf(“\n Error in Listen.“);
WSACleanup(); 
return -4;
}
::listen_socket=listen_socket; 
AfxBeginThread(UserToProxyNULL);   //启动侦听
return 1;
}
int CloseServer()  //关闭服务
{
closesocket(listen_socket);
WSACleanup();
return 1;
}
//分析接收到的字符,得到远程主机地址
int ResolveInformation( char * str char *address int * port)
{
char buf[MAXBUFFERSIZE] command[512] proto[128] *p;
int j;
sscanf(str“%s%s%s“commandbufproto);
p=strstr(bufHTTP);
//HTTP
if(p)
{
p+=strlen(HTTP);
for(int i=0;i< strlen(p);i++)
if( *(p+i)==‘/‘) break;
*(p+i)=0;
strcpy(addressp);
p=strstr(strHTTP);
//去掉远程主机名: 
//GET http://www.njust.edu.cn/ HTTP1.1  == > GET / HTTP1.1
for(int j=0;j< i+strlen(HTTP);j++)
*(p+j)=‘ ‘;
//缺省的 http 端口 
*port=80;      
}
else
{
//FTP 不支持 下面的代码可以省略.
p=strstr(bufFTP);
if(!p) return 0;
p+=strlen(FTP);
for(int i=0;i< strlen(p);i++)
if( *(p+i)==‘/‘) break;      //Get The Remote Host
*(p+i)=0;
for(j=0;j< strlen(p);j++)
if(*(p+j)==‘:‘) 
{
*port=atoi(p+j+1);    //Get The Port
*(p+j)=0;
}
else *port=2

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      17248  2008-09-24 09:34  SOCKET5SERVER\MySocks5.aps

     文件        245  2003-11-28 23:21  SOCKET5SERVER\MySocks5.clw

     文件       9843  2003-11-29 00:28  SOCKET5SERVER\MySocks5.cpp

     文件       4308  2003-11-28 23:21  SOCKET5SERVER\MySocks5.dsp

     文件        541  2003-11-28 23:21  SOCKET5SERVER\MySocks5.dsw

     文件        332  2003-11-28 23:21  SOCKET5SERVER\MySocks5.h

     文件      66560  2008-09-24 09:34  SOCKET5SERVER\MySocks5.ncb

     文件      49664  2008-09-24 09:34  SOCKET5SERVER\MySocks5.opt

     文件       2229  2008-09-24 09:34  SOCKET5SERVER\MySocks5.plg

     文件       1457  2003-11-28 23:21  SOCKET5SERVER\MySocks5.rc

     文件       1619  2003-11-28 23:21  SOCKET5SERVER\ReadMe.txt

     文件        449  2003-11-28 23:21  SOCKET5SERVER\Resource.h

     文件        295  2003-11-28 23:21  SOCKET5SERVER\StdAfx.cpp

     文件       1106  2003-11-28 23:21  SOCKET5SERVER\StdAfx.h

     目录          0  2008-09-24 09:41  SOCKET5SERVER

----------- ---------  ---------- -----  ----

               155896                    15


评论

共有 条评论