社区
通信技术
帖子详情
高分紧急求助,关于网络通信和程序交互,高手请进!
lcn8575
2004-06-14 04:23:37
小弟正在编一个网络通信程序,遇到了好多问题无法解决,恳请各位大侠指点:
程序有以下几个要求:
1)一个基于局域网的网络协商程序;
2)要求既能实现广播通信,又能点对点通信;
3)更重要的是在接收到合适的数据以后,要启动其他的相关程序,如何将一个接收到字符串变成命令行的命令自动输入到另一个程序的交互式窗口中去?比如收到一个字符串为“connect”,怎样将变成另一个程序命令行的命令?
用什么方法?最好给个例子。
一定给分!!!
...全文
145
6
打赏
收藏
高分紧急求助,关于网络通信和程序交互,高手请进!
小弟正在编一个网络通信程序,遇到了好多问题无法解决,恳请各位大侠指点: 程序有以下几个要求: 1)一个基于局域网的网络协商程序; 2)要求既能实现广播通信,又能点对点通信; 3)更重要的是在接收到合适的数据以后,要启动其他的相关程序,如何将一个接收到字符串变成命令行的命令自动输入到另一个程序的交互式窗口中去?比如收到一个字符串为“connect”,怎样将变成另一个程序命令行的命令? 用什么方法?最好给个例子。 一定给分!!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
awjx
2004-06-17
打赏
举报
回复
楼主是谁呀?
怎么与我做一样的
gracezhu
2004-06-15
打赏
举报
回复
http://www.pcvc.net/category/content.asp?sendid=261
lcn8575
2004-06-14
打赏
举报
回复
to netsys2:
谢谢你的回答!
不过这是个BC的程序吧?
我对BC不是很熟,还是希望能看到个VC的程序代码.
谢谢了!
netsys2
2004-06-14
打赏
举报
回复
1),2)查看CB或者DELPHI中CHAT程序
3)
Easy,
用管道。
http://www.chinabcb.com/bbs/viewtopic.php?t=5113&highlight=%B9%DC%B5%C0
★使用管道技术实例
代码:
bool __fastcall TForm1::RunCmd(AnsiString cmd,TStringList *stringlist)
{
TMemoryStream *memstream=new TMemoryStream();
AnsiString rn="\\r\\n";
PROCESS_INFORMATION proc;
STARTUPINFO start;
SECURITY_ATTRIBUTES sa;
long ret;
unsigned long lngBytesread;
HANDLE hReadPipe,hWritePipe;
char *strBuff=(char *)malloc(256);
if(strBuff==NULL)
{
return false;
}
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.bInheritHandle=true;
sa.lpSecurityDescriptor=NULL;
ret=CreatePipe(&hReadPipe,&hWritePipe,&sa,0);
if(ret==0)
{
//创建管道失败
return false;
}
memset(&start,0x00,sizeof(STARTUPINFO));
start.cb=sizeof(STARTUPINFO);
start.dwFlags=STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
start.hStdOutput=hWritePipe;
start.hStdError=hWritePipe;
bool retc=CreateProcess(NULL,cmd.c_str(),NULL,NULL,true, 0, 0, NULL, &start, &proc);
if(!retc)
{
return false;
}
CloseHandle(hWritePipe);
unsigned long len;
memstream->Position=0;
while(true)
{
memset(strBuff,0x00,256);
GetFileSize(hReadPipe,&len);
ret = ReadFile(hReadPipe, strBuff, 256, &lngBytesread,NULL);
if(ret==0)
{
break;
}
else
{
memstream->Write(strBuff,lngBytesread);
}
}
CloseHandle(proc.hProcess);
CloseHandle(proc.hThread);
CloseHandle(hReadPipe);
memstream->Position=0;
free(strBuff);
stringlist->LoadFromStream(memstream);
memstream->Clear();
delete memstream;
return true;
}
以上为一个使用管道获取命令行模式的程序的运行结果的函数。
使用代码
TStringList *StrList=new TStringList;
AnsiString strcmd;
RunCmd(strcmd,StrList);
结果保留再StrList中。
试了试,发现上述代码运行时不能显示中间过程,要等到程序完全运行结束才能看到结果,不太方便(特别是运行比较耗时的命令)。并且会多出一些不必要的空行,和dos窗口下看到的结果不一样(例如运行ping的命令)。
下面是我改进的代码,把运行的情况直接显示在Memo1中。其实我觉得没有太大的必要使用TMemoryStream,直接用AnsiString就可以了。
代码:
//---------------------------------------------------------------------------
String __fastcall TForm1::ExecuteApp(String sCmdline)
{
PROCESS_INFORMATION proc = {0};
long ret,k=1;
bool bret;
STARTUPINFO start = {0};
SECURITY_ATTRIBUTES sa = {0};
HANDLE hReadPipe ;
HANDLE hWritePipe;
String sOutput;
String sBuffer;
unsigned long lngBytesRead;
char cBuffer[257];
sa.nLength = sizeof(sa);
sa.lpSecurityDescriptor=0;
sa.bInheritHandle = TRUE;
bret =::CreatePipe(&hReadPipe, &hWritePipe,&sa, 0);
if (!bret)
{
sOutput="CreatePipe failed. Error: " + String(GetLastError());
Memo1->Lines->Add(sOutput);
return sOutput;
}
start.cb = sizeof(STARTUPINFOA);
start.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
start.hStdOutput = hWritePipe;
start.hStdError = hWritePipe;
start.wShowWindow = SW_HIDE;
sBuffer = sCmdline;
ret =::CreateProcess(0, sBuffer.c_str(), &sa, &sa, TRUE, NORMAL_PRIORITY_CLASS, 0, 0, &start, &proc);
if (ret == 0)
{
sOutput="Bad command or filename";
Memo1->Lines->Add(sOutput);
return sOutput;
}
::CloseHandle(hWritePipe);
do
{
memset(cBuffer,'\0',sizeof(cBuffer));
ret = ::ReadFile(hReadPipe, &cBuffer, 256, &lngBytesRead, 0);
sBuffer=StrPas(cBuffer);
sOutput = sOutput + sBuffer;
Memo1->Text=Memo1->Text+sBuffer;
Application->ProcessMessages();
} while (ret != 0 );
::CloseHandle(proc.hProcess);
::CloseHandle(proc.hThread);
::CloseHandle(hReadPipe);
return sOutput;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ExecuteApp("Ping www.chinabcb.com");
}
//---------------------------------------------------------------------------
netsys2
2004-06-14
打赏
举报
回复
system(应该用WINEXEC)是执行一条命令或者程序。
如果要把命令自动输入到另一个程序的交互式窗口,必须用管道,消息。。
cai3995
2004-06-14
打赏
举报
回复
你可以用system()函数来将字符串解析成命令执行
音诺ai翻译机触发BMI160与手势操作激活三击
求助
模式
音诺AI翻译机利用BMI160传感器实现三击
求助
功能,通过加速度与角速度数据精准识别手势,结合中断机制、状态机与机器学习算法,在低功耗下完成快速响应,并集成至系统级安全
交互
体系。
TowardsDataScience 博客中文翻译 2019(四百八十二)
这篇文章讨论了数据科学和机器学习中一个基本算法的基本构建模块:线性回归。我讨论了优化用于预测目标值 y 的回归权重或参数的两种方法。虽然最小二乘法对于一个要素(x)相当简单,但梯度下降更常用于大型要素集,因为同时计算所有权重会更加复杂。这篇文章的目的是让读者深入了解基本算法(如线性回归)的“本质”,以确保正确的使用和解释。如果你想了解更多,请查看本系列关于逻辑回归的下一篇文章!我希望你觉得这篇文章很有用,并且像往常一样,欢迎在评论中发表意见!
ACloudGuru 博客中文翻译(二)
专业的云开发人员了解云原生软件设计的原则,并且能够使用可伸缩性、可靠性和安全性的最佳实践来构建、测试和部署应用
程序
。对于使用谷歌云平台的开发人员来说,专业云开发人员认证证明你处于云原生开发的前沿,并将使你在竞争激烈的云开发人员就业市场中领先于同行。正如谷歌所说:“专业的云开发人员使用谷歌推荐的实践和工具构建可扩展和高度可用的应用
程序
。此人拥有云原生应用
程序
、开发人员工具、托管服务和下一代数据库方面的经验。专业的云开发人员还至少精通一种通用编程语言,并擅长生成有意义的指标和日志来调试和跟踪代码。
最详细的手机资料名词术语解释
最详细的手机资料名词术语解释
网络应用与频率
关于网络频率,请看多普达900和诺基亚N70的介绍,有提及的频率就表示这台机支持这个功能~
多普达900的网络频率:
GSM/GPRS/WCDMA;900/1800/1900/2100MHz
诺基亚N70的网络频率:
GSM/GPRS/WCDMA/EDGE;900/1800/1900MHz
(注
社会工程学习手册(一)
这本书将为你提供对社会工程的整体理解。通过让您详细了解社会工程师如何运作,它将帮助您避免和打击社会工程攻击。学习社会工程从给你不同类型的社会工程攻击及其造成的损害的基础开始。然后,它设置实验室环境以使用不同的工具,然后执行社会工程步骤,如信息收集。这本书涵盖的主题从诱饵,网络钓鱼,鱼叉式网络钓鱼,到伪装和恐吓软件。到本书结束时,你将有能力保护自己和你的系统免受社会工程的威胁和攻击。总而言之,这本书从头到尾涵盖了社会工程,并摘录了许多世界知名的安全专家的观点。本世纪最大的网络攻击之一发生在雅虎!
通信技术
4,390
社区成员
28,915
社区内容
发帖
与我相关
我的任务
通信技术
通信技术相关讨论
复制链接
扫一扫
分享
社区描述
通信技术相关讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章