如何实现C#和C++的通信

如何实现C#和C++的通信,第1张

只根据题目要求,写了个两种语言(C#,C++)相互通信的代码,主要原理就是socket通信! C++代码(客户端):#include <stdioh>#include <stringh>#include <AfxWinh>#include <windowsh>#include "Winsock2h"#pragma comment (lib, "ws2_32lib")void main(){ WORD wVersionRequested; WSADATA wsaData; int err; int bytes=0; wVersionRequested = MAKEWORD(1,1); err = WSAStartup( wVersionRequested, &wsaData ); if(err!=0 ) { exit(0); } if(LOBYTE( wsaDatawVersion )!= 1|| HIBYTE( wsaDatawVersion )!= 1) { WSACleanup( ); exit(0); } SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0); SOCKADDR_IN addrSrv; addrSrvsin_addrS_unS_addr=inet_addr("127001"); addrSrvsin_family=AF_INET; addrSrvsin_port=htons(9950); connect(sockClient,(SOCKADDR)&addrSrv,sizeof(SOCKADDR)); //发送 int i=0; char zjs[10],buff;; CFile myfile; myfileOpen("牌坊jpg",CFile::modeRead|CFile::typeBinary);//自己修改路径 int t; t=myfileGetLength(); sprintf(zjs,"%d",t); printf("总大小: %s\n",zjs); buff=(char )malloc((t+1)sizeof(char)); myfileRead(buff,myfileGetLength()); send(sockClient,zjs,strlen(zjs),0); send(sockClient,buff,myfileGetLength(),0); //接收 char recvBuf[50]; bytes=recv(sockClient,recvBuf,50,0); for(i=0;i<bytes;i++); recvBuf[i]='\0'; printf("%s\n",recvBuf); closesocket(sockClient); WSACleanup();}C#代码(服务端):using System;using SystemCollectionsGeneric;using SystemDiagnostics;using SystemText;using SystemTextRegularExpressions;using SystemNet;using SystemNetSockets;using SystemIO;namespace socket服务器端{ class Program { static void Main(string[] args) { int bytes=0; byte[] buffer=new byte[10240]; IPEndPoint ipe1 = new IPEndPoint(IPAddressAny, 9950); Socket socket1 = new Socket(AddressFamilyInterNetwork, SocketTypeStream, ProtocolTypeTcp); socket1Bind(ipe1); while (true) { socket1Listen(10); Socket socket2 = socket1Accept(); IPEndPoint ipe2 = (IPEndPoint)socket2RemoteEndPoint; if (socket2Connected) { ConsoleWriteLine("开始接收"); int start = 0; FileStream fs = new FileStream("牌坊jpg",FileModeCreate); BinaryWriter bw = new BinaryWriter(fs); bytes = socket2Receive(buffer); int total=Int32Parse(EncodingDefaultGetString(buffer, 0, bytes)ToString()); ConsoleWriteLine("总大小: "+ total); do { bytes = socket2Receive(buffer); bwSeek(start, 0); bwWrite(buffer, 0, bytes); start += bytes; ConsoleWriteLine("已经接收: "+ start); }while(start<total); bwFlush(); bwClose(); fsClose(); socket2Send(EncodingDefaultGetBytes("主机接收完毕")); } socket2Shutdown(SocketShutdownBoth); socket2Close(); break; } ConsoleWriteLine("接收完毕"); ProcessStart("牌坊jpg"); ConsoleReadLine(); } }}注意事项(C++):效果(C++) 效果(C#)

服务器侦听的IP最好由代码获取本机IP,别写字符串
IPAddress IP=SystemNetDnsGetHostAddresses(SystemNetDnsGetHostName())[0];
侦听最好使用回调方法,当客户端连接上来,调用回调函数,用TcpListener

自己的IP地址 如果是直接入网的话(无网关 不是学校公司这种局域网入网的) 就是你上百度贴吧匿名发帖的那个IP 其他方法也有 但是这个最直观
还有 SOCKET不是一个端口性质的东西 而是更像一个数据包这种样子的东西 这点很容易混淆
比如说 如果是服务器监听客户端的话 :
服务器不需要知道客户端的IP 只需要打开自己这边的一个端口(PORT) 然后建立一个SOCKET实例绑定到这个端口 然后就成功的监听了 运行后所有发送到这个端口的BYTE流都可以通过SOCKETBEGINACCEPT方法来接收
而客户端却不但要知道服务器的IP 还要知道服务器用来监听的那个端口(PORT) 这样就形成了一个服务器ENDPOINT(IP+PORT) 然后自己生成一个SOCKET实例 再连接那个服务器ENDPOINT 再通过这个SOCKET实例传输自己的BYTE流
编IM还是很复杂的 尤其是线程和异步调用的问题 SOCKET只是第一步 和网页的那种伪IM完全不一样的
还有什么问题的话可以HI我 不过我也是菜鸟 只能尽力而为了

是柴静雾霾调查穹顶之下,同呼吸共命运网站上的都被删了。
《穹顶之下》说了什么
多数人已经看过这部纪录片了。只写我印象比较深的一些内容及一些关键问题。
1 环境与健康的问题。这是开篇就讲的问题。癌症发病率增加,污染贡献度是很高的,官方态度不甚明朗。但医院只能说不明原因。这个问题必将困扰中国数十年,社会成本和司法成本都会很高。
2 产业结构问题。里面有很经典的一句话:世界钢铁产量,中国第一,河北第二,唐山第三,美国第四。落后、污染产能仍然占不小比例。还有一句经典,一位官员说,河北钢铁已经是大而不倒了。
3 能源结构问题。柴静的逻辑性很强,从煤在能源占比讲起。但单纯煤多不能说明问题,关键是煤脏。单纯煤脏也不一定会产生问题,关键是都不洗。于是问题就来了。
4 环保执法问题。暗访时有企业主说:环保部门?你有义务,没有权利。全国人大的在纪录片说了一句话,环保执法牙齿不够硬,所以我们“都不敢张嘴,怕别人看到嘴里没有牙齿”。雾霾对人的呼吸系统心血管系统都有危害出门做好防护美国进口普卫欣 天 猫有效防雾霾的吸入。
5 信息公开与公众参与问题。柴静直言信息公开是良药。直接推介了IPE的污染地图APP(据称片子播出之后,服务器已经超负荷)。另外也给12369热线电话做了个广告。
整个纪录片叙事逻辑和结构都很清楚,很多问题都说得深入脊髓,100分钟将雾霾问题分析如此透彻已经很牛很牛了。片子在数十分钟的质疑之后还不忘在最后十分钟给人留了点温暖。柴静打个12369就解决了门口饭馆的油烟问题,肉饼老板还笑脸相迎;在尘土飞扬的工地找包工头,包工头立马把土堆盖住。窃以为多少有点小概率的嫌疑。不过,留一点阳光,才好扫清雾霾吧。

'FSO删除文件函数,需要服务器端支持FSO组件
'参数说明:TestFile 文件的物理路径
'传递说明:调用时候,取得文件的相对或绝对路径
' TestFile = ServerMapPath(yourFilePath)
' DeleteUpfile(TestFile)
function DeleteUpfile(TestFile)
Set TestFileObject=ServerCreateObject("ScriptingFileSystemObject")
IF TestFileObjectFileExists(TestFile) then
TestFileObjectDeleteFile TestFile
END IF
set TestFileObject=nothing
end function

一台H3C MSR36系列的路由器开机后停留在
<boot>
提示符下,似乎是不能运行启动软件包了。重启后按Ctrl+B进入BOOT ROM菜单,进入文件系统查看CF卡的内容,貌似启动软件包名称上有些混乱,原因未知(意外断电?上次升级 *** 作失误?),干脆格式化CF卡,重装系统。
这里简要记录下 *** 作步骤。
一 准备PC环境用于安装
1 硬件:PC,网线;
2 软件:ciscotftp软件,路由器最新的IPE文件(从H3C官网下载,文中使用的版本为MSR36-CMW710-R0106P08IPE);
3 配置:网线连接PC网卡和路由器的GE0/0接口
设置PC的IP地址:1921681100
将IPE文件复制到D:\ciscotftp\h3c 目录下
运行cisco tftp 服务器软件,并设置tftp根目录为D:\ciscotftp\h3c
二 配置路由器以太网口参数
开机按Ctrl+B进入BOOT ROM菜单,在BOOT ROM菜单下键入<3>进入以太网口子菜单,然后键入<5>进入以太网口配置菜单:
=========================<ETHERNETPARAMETER SET>=========================|Note:'' = Clear field ||'-' = Go to previous field ||Ctrl+D = Quit |======================================================================Protocol (FTP or TFTP) :tftpLoadFile Name :MSR36-CMW710-R0106P08IPE:Target File Name :MSR36-CMW710-R0106P08IPE:Server IP Address :1921681100LocalIP Address :1921681101GatewayIP Address :0000FTPUser Name :FTPUser Password :
依次重新设定各参数:tftp协议,文件名,PC IP地址,路由器IP地址等
可能需要重启路由器,重新设置的IP地址才会生效。
三 加载软件
BOOT ROM菜单,在BOOT ROM菜单下键入<3>进入以太网口子菜单,然后键入<3>:
将会进行IPE文件的传输,ftp服务端也可以查看传输的进度,传输完成后路由器会自动解压缩,并有相应的提示,此时可以reboot机器。
四 导入授权文件
将机器的授权文件复制到cfa0:/license文件夹中。
五 修复Data Feature
我在升级过程中遇到安装了data版授权激活文件,但是data软件包无法加载的情况。这时可以通过手动加载软件包的方式,使之生效:
<H3C>install activate feature cfa0:/msr36-cmw710-data-r0106p08bin
之后再执行以下命令,可以查看已经运行的软件包:
<H3C>display install active
最后执行如下命令,使当前配置在下次重启后依然生效:
<H3C>install commit
完成该步骤后如果有兴趣的话,进去BOOT ROM菜单,文件控制子菜单,会发现msr36-cmw710-data-r0106p08bin已被设置为"Main"类型,即系统默认的引导文件。
全部工作完成。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/13484301.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-08-16
下一篇 2023-08-16

发表评论

登录后才能评论

评论列表(0条)

保存