


So stellen Sie eine langfristige Pipe-Verbindung zwischen Go und der C#-Konsolenanwendung her
php小编新一为您介绍如何在Go和C#控制台应用程序之间建立长期管道连接。在开发跨平台应用程序时,Go和C#是两种常用的编程语言。建立管道连接可以实现两种语言之间的通信和数据交换。本文将介绍如何使用Go和C#的相关库和API来建立稳定、可靠的长期管道连接,以便实现数据的传输和交互。无论您是Go开发者还是C#开发者,通过本文的指导,您都可以轻松地在两种语言之间建立管道连接,实现应用程序的功能需求。
问题内容
我有非常简单的 C# 控制台应用程序。这将是一个添加从 go 部分传递的 double
变量的过程。
double sum = 0; bool flag = true; while(flag) { // exit on convert error var str = Console.ReadLine(); // ask string double addend; flag = double.TryParse(str, out addend); // convert to double sum += flag ? addend : 0; //add on success Console.WriteLine(sum); } return 0;
我的 go 部分也很简单。它使用以前的控制台应用程序创建进程,向其发送字符串并读回结果。
package main import ( "fmt" "io" "log" "os/exec" ) func main() { cmd := exec.Command("%path to app%\\ConsoleApp.exe") // process that will be started stdout, err := cmd.StdoutPipe() // use std out pipe if err != nil { log.Fatal(err) } stdin, err := cmd.StdinPipe() // use std in pipe if err != nil { log.Fatal(err) } if err := cmd.Start(); err != nil { // start log.Fatal(err) } for true { var w1 string _, err := fmt.Scanln(&w1) // read line if err != nil { log.Fatal() } go func() { io.WriteString(stdin, w1) // pass it to console app }() read, err := io.ReadAll(stdout) // read result fmt.Println(read) if err != nil { log.Fatal() } } }
我开始调试控制台应用程序的进程(它出现在任务管理器、RMC - 调试中),但存在符号错误,所以我什至无法理解我的应用程序是否获取了字符串。
这只是我的麻烦的一半。我认为我的控制台应用程序有一两次收到字符串(我的意思是以前的时间),但只有第一个,导致管道在传输/复制后关闭。那么我该如何控制呢?我想要执行多个事务、写入和读取,并仅在需要时关闭管道。
编辑:我对 ConsoleApp 做了一些更改。现在看起来像这样:
double sum = 0; bool flag = true; while(flag) { var str = Console.ReadLine(); double addend; flag = double.TryParse(str, out addend); // File creation will indicate that message was recieved. using(StreamWriter writer = new StreamWriter("t.txt")) { writer.WriteLine($"{flag}"); } sum += flag ? addend : 0; Console.WriteLine(sum); } return 0;
解决方法
所以,@maxm 非常接近(或者甚至已经找到了解决方案,但它对我不起作用,fsr)。
执行部分:
package main import ( "bufio" "fmt" "log" "os/exec" ) func main() { cmd := exec.Command("%path to the exe%") stdout, err := cmd.StdoutPipe() if err != nil { log.Fatal(err) } stderr, err := cmd.StderrPipe() if err != nil { log.Fatal(err) } scanner := bufio.NewScanner(stdout) stdin, err := cmd.StdinPipe() if err != nil { log.Fatal(err) } if err := cmd.Start(); err != nil { log.Fatal(err) } for { var w1 string _, err := fmt.Scanln(&w1) w2 := []byte(w1) // important! You need convert string to byte array if err != nil { log.Fatal() } if _, err := stdin.Write(w2); err != nil { // pass byte array log.Fatal(stderr) panic(err) } if scanner.Scan() { read := scanner.Text() fmt.Println(read) } else { if err := scanner.Err(); err != nil { panic(err) } } } }
C# 部分非常简单。首先,您需要从字节数组恢复字符串:
public static string ByteArrayToString(this byte[] byteArray, int size) { // get decoder to decode input encoding var decoder = Console.InputEncoding.GetDecoder(); // count char that will be restored int charCount = decoder.GetCharCount(byteArray, 0, size); // initialize char array char[] charArray = new char[charCount]; // restore to char array decoder.GetChars(byteArray, 0, size, charArray, 0); // get and return string from our char array return new string(charArray); }
接下来是主要部分:
double sum = 0; bool flag = true; while(flag) { string str; using Stream stdin = Console.OpenStandardInput(); // for reading byte[] buffer = new byte[2048]; int bytes = 0; // bytes count while((bytes = stdin.Read(buffer, 0, buffer.Length)) > 0) { // read str = buffer.ByteArrayToString(bytes); // restore string flag = double.TryParse(str, out double addend); sum += flag ? addend : 0; Console.WriteLine(sum); //write if(!flag) break; } } return 0;
Das obige ist der detaillierte Inhalt vonSo stellen Sie eine langfristige Pipe-Verbindung zwischen Go und der C#-Konsolenanwendung her. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



C++ bietet einen umfangreichen Satz an Open-Source-Bibliotheken, die die folgenden Funktionen abdecken: Datenstrukturen und Algorithmen (Standard Template Library), Multithreading, reguläre Ausdrücke (Boost), lineare Algebra (Eigen), grafische Benutzeroberfläche (Qt), Computer Vision (OpenCV), maschinelles Lernen (TensorFlow) Verschlüsselung (OpenSSL) Datenkomprimierung (zlib) Netzwerkprogrammierung (libcurl) Datenbankverwaltung (sqlite3)

Qt ist ein plattformübergreifendes C++-Anwendungsentwicklungsframework. Es wird häufig zum Entwickeln von GUI-Anwendungen verwendet. In diesem Artikel wird die Methode zur Installation von Qt unter dem Debian-System ausführlich vorgestellt. und Spezifische Schritte zur Installation von Qt in Debian10. Qt unter Debian wird im Debian-System installiert. Die folgenden Schritte sind für die Installation von Qt im Debian-System erforderlich: 1. Öffnen Sie das Terminal und aktualisieren Sie die Paketliste: „shellsudoapt-getupdate“. `` 2. Installieren Sie die Qt-Bibliothek und die integrierte Entwicklungsumgebung QtCreator: sudoapt-ge

Titel: Erkundung der zukünftigen Entwicklungstrends der Go-Sprache Mit der rasanten Entwicklung der Internettechnologie werden auch Programmiersprachen ständig weiterentwickelt und verbessert. Unter anderem ist die von Google entwickelte Open-Source-Programmiersprache Go (Golang) wegen ihrer Einfachheit, Effizienz und Parallelitätsfunktionen sehr gefragt. Da immer mehr Unternehmen und Entwickler beginnen, die Go-Sprache zum Erstellen von Anwendungen zu verwenden, hat der zukünftige Entwicklungstrend der Go-Sprache große Aufmerksamkeit erregt. 1. Eigenschaften und Vorteile der Go-Sprache Die Go-Sprache ist eine statisch typisierte Programmiersprache mit Garbage-Collection-Mechanismus und

Merkmale und Vorteile der C-Sprache: Warum ist sie eine der beliebtesten Programmiersprachen? Als universelle Programmiersprache auf hohem Niveau verfügt die Sprache C über viele einzigartige Merkmale und Vorteile, weshalb sie zu einer der beliebtesten Programmiersprachen geworden ist. In diesem Artikel werden die Merkmale und Vorteile der C-Sprache sowie ihre breite Anwendung in verschiedenen Bereichen untersucht. Erstens verfügt die C-Sprache über eine prägnante Syntax und eine klare Struktur. Im Vergleich zu anderen Programmiersprachen ist die Syntax der C-Sprache relativ einfach und leicht zu verstehen und zu erlernen. Es nutzt die Eigenschaften natürlicher Sprache, um Programmierern dies zu ermöglichen

PyCharm kann Python-Projekte nicht direkt als APKs verpacken. PyCharm konzentriert sich auf die Python-Entwicklung, während APKs zum Ausführen von Apps auf Android-Geräten verwendet werden. Das Packen eines Python-Projekts als APK erfordert zusätzliche Tools und Schritte.

Bei der Wahl zwischen UniApp und nativer Entwicklung sollten Sie Entwicklungskosten, Leistung, Benutzererfahrung und Flexibilität berücksichtigen. Die Vorteile von UniApp sind plattformübergreifende Entwicklung, schnelle Iteration, einfaches Lernen und integrierte Plug-Ins, während die native Entwicklung in Bezug auf Leistung, Stabilität, native Erfahrung und Skalierbarkeit überlegen ist. Wägen Sie die Vor- und Nachteile basierend auf den spezifischen Projektanforderungen ab. UniApp eignet sich für Anfänger, und die native Entwicklung eignet sich für komplexe Anwendungen, die eine hohe Leistung und ein nahtloses Erlebnis anstreben.

Vor- und Nachteile der Verwendung von Chinesisch zur Benennung von Java-Variablen In der Java-Programmierung verwenden wir normalerweise Englisch, um Bezeichner wie Variablen, Methoden und Klassen zu benennen. Manchmal können wir jedoch auch die Verwendung von Chinesisch als Teil der Kennung in Betracht ziehen. In diesem Artikel werden die Vor- und Nachteile der Verwendung chinesischer benannter Java-Variablen untersucht und einige spezifische Codebeispiele aufgeführt. Vorteil 1: Verbessern Sie die Lesbarkeit des Codes. Durch die Verwendung chinesischer benannter Java-Variablen kann der Code leichter verständlich und lesbar gemacht werden. Schließlich versteht und erkennt unser Gehirn Chinesisch natürlicher und flüssiger als Englisch. Für Nicht-Englisch

Der Unterschied zwischen Go-Sprache und Java in der Entwicklungseffizienz: Überblick über Vor- und Nachteile Go-Sprache und Java sind beide beliebte Programmiersprachen und haben ihre eigenen Vor- und Nachteile. Auch in Bezug auf die Entwicklungseffizienz weisen Go-Sprache und Java unterschiedliche Leistungen auf. Die Vorteile der Go-Sprache sind einfach und leicht zu erlernen: Die Syntax der Go-Sprache ist einfach und leicht zu verstehen, und die Lernkurve ist gering. Dies macht die Go-Sprache ideal für Programmieranfänger oder Programmierer, die Projekte schnell entwickeln müssen. Schnelle Kompilierungsgeschwindigkeit: Die Kompilierungsgeschwindigkeit der Go-Sprache ist sehr hoch, wodurch sich die Go-Sprache sehr gut für schnelle Iterationen eignet.
