


Bagaimana untuk mewujudkan sambungan paip jangka panjang antara aplikasi konsol go dan c#
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;
Atas ialah kandungan terperinci Bagaimana untuk mewujudkan sambungan paip jangka panjang antara aplikasi konsol go dan c#. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



C++ menyediakan set perpustakaan sumber terbuka yang kaya yang meliputi fungsi berikut: struktur dan algoritma data (Perpustakaan Templat Standard) berbilang benang, ungkapan biasa (Boost) antara muka pengguna grafik (Eigen) antara muka pengguna grafik (Qt) penglihatan komputer (OpenCV) pembelajaran mesin. (TensorFlow) Penyulitan (OpenSSL) Pemampatan data (zlib) Pengaturcaraan rangkaian (libcurl) Pengurusan pangkalan data (sqlite3)

Qt ialah rangka kerja pembangunan aplikasi C++ merentas platform Ia digunakan secara meluas untuk membangunkan aplikasi GUI Dalam sistem Debian, kami boleh memasang Qt melalui pengurus pakej Artikel ini akan memperincikan kaedah memasang Qt di bawah sistem Debian langkah untuk memasang Qt dalam Debian10. Qt di bawah Debian dipasang dalam sistem Debian Kami boleh memasang Qt melalui pengurus pakej apt Berikut adalah langkah-langkah untuk memasang Qt dalam sistem Debian: 1. Buka terminal dan kemas kini senarai pakej: ```shellsudoapt-getupdate. `` `2 Pasang perpustakaan Qt dan persekitaran pembangunan bersepadu QtCreator: sudoapt-ge

Tajuk: Meneroka trend pembangunan masa depan bahasa Go Dengan perkembangan pesat teknologi Internet, bahasa pengaturcaraan juga sentiasa berkembang dan bertambah baik. Antaranya, sebagai bahasa pengaturcaraan sumber terbuka yang dibangunkan oleh Google, bahasa Go (Golang) sangat dicari untuk ciri kesederhanaan, kecekapan dan keselarasannya. Memandangkan semakin banyak syarikat dan pembangun mula menggunakan bahasa Go untuk membina aplikasi, trend pembangunan masa depan bahasa Go telah menarik perhatian ramai. 1. Ciri-ciri dan kelebihan bahasa Go Bahasa Go ialah bahasa pengaturcaraan bertaip statik dengan mekanisme pengumpulan sampah dan

Ciri dan Kelebihan Bahasa C: Mengapakah ia merupakan salah satu bahasa pengaturcaraan yang paling popular? Sebagai bahasa pengaturcaraan peringkat tinggi tujuan umum, bahasa C mempunyai banyak ciri dan kelebihan unik, itulah sebabnya ia telah menjadi salah satu bahasa pengaturcaraan yang paling popular. Artikel ini akan meneroka ciri dan kelebihan bahasa C, serta aplikasinya yang meluas dalam pelbagai bidang. Pertama sekali, bahasa C mempunyai sintaks yang ringkas dan struktur yang jelas. Berbanding dengan bahasa pengaturcaraan lain, sintaks bahasa C agak mudah dan mudah difahami dan dipelajari. Ia menggunakan ciri-ciri bahasa semula jadi untuk membolehkan pengaturcara

PyCharm tidak boleh membungkus projek Python secara langsung sebagai APK. PyCharm memfokuskan pada pembangunan Python, manakala APK digunakan untuk menjalankan apl pada peranti Android. Membungkus projek Python sebagai APK memerlukan alat dan langkah tambahan.

Apabila memilih antara UniApp dan pembangunan asli, anda harus mempertimbangkan kos pembangunan, prestasi, pengalaman pengguna dan fleksibiliti. Kelebihan UniApp ialah pembangunan merentas platform, lelaran pantas, pembelajaran mudah dan pemalam terbina dalam, manakala pembangunan asli lebih unggul dalam prestasi, kestabilan, pengalaman asli dan kebolehskalaan. Timbang kebaikan dan keburukan berdasarkan keperluan projek khusus UniApp sesuai untuk pemula, dan pembangunan asli sesuai untuk aplikasi kompleks yang mengejar prestasi tinggi dan pengalaman yang lancar.

Kelebihan dan Kelemahan Menggunakan Bahasa Cina untuk Menamakan Pembolehubah Java Dalam pengaturcaraan Java, kami biasanya menggunakan bahasa Inggeris untuk menamakan pengecam seperti pembolehubah, kaedah dan kelas. Walau bagaimanapun, kadangkala kita juga boleh mempertimbangkan untuk menggunakan bahasa Cina sebagai sebahagian daripada pengecam. Artikel ini akan meneroka kelebihan dan kekurangan menggunakan pembolehubah Java bernama Cina dan memberikan beberapa contoh kod khusus. Kelebihan 1: Meningkatkan kebolehbacaan kod Menggunakan pembolehubah Java bernama bahasa Cina boleh menjadikan kod lebih mudah difahami dan dibaca. Lagipun, otak kita memahami dan mengenali bahasa Cina dengan lebih semula jadi dan fasih daripada bahasa Inggeris. Untuk bukan bahasa Inggeris

Perbezaan antara bahasa Go dan Java dalam kecekapan pembangunan: Gambaran keseluruhan kelebihan dan kekurangan Bahasa Go dan Java adalah kedua-dua bahasa pengaturcaraan yang popular, dan mereka mempunyai kelebihan dan kekurangan mereka sendiri. Dari segi kecekapan pembangunan, bahasa Go dan Java juga mempunyai prestasi yang berbeza. Kelebihan bahasa Go adalah mudah dan mudah dipelajari: Sintaks bahasa Go adalah ringkas dan mudah difahami, dan keluk pembelajaran adalah rendah. Ini menjadikan bahasa Go sesuai untuk pengaturcara atau pengaturcara pemula yang perlu membangunkan projek dengan cepat. Kelajuan penyusunan pantas: Kelajuan penyusunan bahasa Go adalah sangat pantas, yang menjadikan bahasa Go sangat sesuai untuk lelaran pantas.
