#include <winsock2.h>
#include <windows.h>
#include <iostream.h>
#pragma comment (lib,"ws2_32")
#define locport 8000
#define gatport 11282
#define maxsize 40*1024
struct sockaddr_in sin[2][4]={
{0}};
SOCKET sock[2][2]={
{0}},slisten=INVALID_SOCKET;
BOOL local;
int addrlen=sizeof(struct sockaddr_in);
void start()
{
cout<<" ---------------------------------------------------/n";
cout<<" || || /n";
cout<<" || QQtcp (TCP转发) || /n";
cout<<" || || /n";
cout<<" ---------------------------------------------------"<<endl;
}
void usage()
{
cout<<"/nUsage:/r/n/tQQtcp -l[-g] ip port"<<endl;
cout<<"/tQQtcp -h"<<endl;
cout<<"Example:/r/n";
cout<<"/tQQtcp -l 127.0.0.1 11282"<<endl;
cout<<"/tQQtcp -l 192.168.0.1 11282"<<endl;
cout<<"/tQQtcp -g 61.144.238.156 8000"<<endl;
cout<<"Attention:"<<endl;
cout<<"/t选项 -l : 运行于本机上,ip填网关地址,port必须为11282(网关监听端口);"<<endl;
cout<<"/t QQ客户端所填服务器地址为127.0.0.1,端口为8000(本地监听端口);"<<endl;
cout<<"/t选项 -g : 运行于网关上,ip填腾讯服务器地址,port为腾讯服务器端口;"<<endl;
cout<<"/t选项 -h : 查阅扩展功能及相关帮助文件。"<<endl;
}
DWORD WINAPI t2u(LPVOID param)
{
UNREFERENCED_PARAMETER(param);
fd_set fdread,fdwrite;
int ret,ileft,idx,istbcs=0,iret;
char msgrecv[maxsize]={0},msgsend[maxsize]={0};
while(1)
{
FD_ZERO(&fdread);
FD_ZERO(&fdwrite);
FD_SET(sock[1][0],&fdread);
FD_SET(sock[1][1],&fdwrite);
if((ret=select(0,&fdread,&fdwrite,NULL,NULL))==SOCKET_ERROR)
{
cout<<"/nThread 1 select error: "<<GetLastError()<<endl;
break;
}
if(ret>0)
{
if(FD_ISSET(sock