如何和外网通信

gyrilyuuu 2011-04-20 10:59:05
最近写了一个远程控制软件,我在A地和本地做了一次测试,两台电脑通过外网连接,A地电脑装了Server端,本地启动Client端,Server端绑定A地的IP地址,并且A将他的外网IP告诉了本地,我在本地设置好A地的外网地址和端口连接成功了,但是在执行命令时,却无法执行,产生的错误在屏幕上回显了,着这说明数据可以传送,我发现错误是在fopen函数中
fopen(TempFile,"w+");这个函数的返回值为NULL,请问这是为什么啊
...全文
299 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
gyrilyuuu 2011-04-21
  • 打赏
  • 举报
回复
int Read_Num;
char * CR_LF = "\r\n";
TCHAR TempPath[MAX_PATH];//系统目录
char TempFile[MAX_PATH];//临时文件
char curdir[MAX_PATH];//当前目录

CString Dir_Name = m_csRead.Mid(4,number-4);

Dir_Name.TrimLeft();
Dir_Name.TrimRight();

if(Dir_Name == "")
{
OnServerBroadcast("Sorry, No Directory to Open(没有打开目录).");
//Socket->Close();
}

GetSystemDirectory(TempPath,MAX_PATH);
sprintf(TempFile, "%s", CString(TempPath) + _T("\\bdconf.bat"));

//当前工作目录存入curdir数组

_getcwd(curdir,_MAX_PATH);

//把要列表的目录设置为当前目录
_chdir((LPCTSTR)Dir_Name);

FILE *fp = fopen(TempFile,"w+");
if(fp == NULL)
{
OnServerBroadcast("Sorry, Failure in Open Temp File(不能创建临时文件).");

//设为原来的目录
_chdir(curdir);
return;
//Socket->Close();
}

CString tempstr,tempstr1,title;
title = "文件名称 大小 时间";
fwrite(title,sizeof(char),title.GetLength(),fp);
fwrite(CR_LF,1,2,fp);


//开始查找文件
CFileFind finder;
BOOL bWorking = finder.FindFile("*.*");
while (bWorking)
{
bWorking = finder.FindNextFile();

CString filename;
if(Dir_Name.GetAt(Dir_Name.GetLength()-1) != '\\')
filename = Dir_Name + "\\" + finder.GetFileName();
else
filename = Dir_Name + finder.GetFileName();

struct _stat buf;
int result;
char buffer[] = "A line to output";

//获得文件性质
result = _stat( (LPCTSTR)filename, &buf );

if( result == -1 )
{
OnServerBroadcast("Sorry, Failure in Get File Attribs(不能获得文件性质).");

//设为原来的目录
_chdir(curdir);
return ;
}
else
{
//写入文件
fwrite(filename,sizeof(char),filename.GetLength(),fp);
fwrite(" ",1,2,fp);
tempstr.Format("%ld %s", buf.st_size,ctime( &buf.st_atime));
fwrite(" ",1,2,fp);
fwrite(tempstr,sizeof(char),tempstr.GetLength(),fp);
fwrite(CR_LF,1,2,fp);
}
}

fclose(fp);

FILE *fp1 = NULL;


fp1 = fopen(TempFile,"r");

if(fp1 == NULL)
{
OnServerBroadcast("Sorry, Failure in Open Temp File(不能创建临时文件).");

//设为原来的目录
_chdir(curdir);
return ; //Socket->Close();
}

CString Return_Text = "";
char temp_content[300];

for(int i=0;i<300;i++)
temp_content[i] = '\0';


Read_Num = fread(temp_content,1,300,fp1);
while(Read_Num == 300)
{
Return_Text = Return_Text+temp_content;
for(int i=0;i<300;i++)
temp_content[i] = '\0';
Read_Num = fread(temp_content,1,300,fp1);
}

Return_Text = Return_Text+temp_content;
fclose(fp1);
OnServerBroadcast(Return_Text);
//Socket->Close();

//设为原来的目录
_chdir(curdir);

这是程序源代码 我也不知道是什么原因 返回的错误码是不能创建临时文件 局域网内没有任何问题 一到外网就出问题了
squall_qz 2011-04-21
  • 打赏
  • 举报
回复
TempFile有问题吧……
quwei197874 2011-04-21
  • 打赏
  • 举报
回复
nat穿透
ouyh12345 2011-04-21
  • 打赏
  • 举报
回复
TempFile是什么路径?本地的还是远程的?
i_love_pc 2011-04-21
  • 打赏
  • 举报
回复
貌似有很多开源的木马,可以参考一下。
oyljerry 2011-04-21
  • 打赏
  • 举报
回复
fopen的文件是否有问题,获取错误信息打印,GetLastError

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧