あるPCから別のPCにデータを転送するためのソケットプログラムを作成していますが、処理するバイナリデータを反対側に送信すると問題が発生します。この場合、データソケットがデータを送信している間、メッセージソケットをリッスンするために1つのスレッドが必要です。そのため、問題はソケットではないことがわかりました。画面にデータを書き込もうとすると問題が発生します(今回はソケットがありません)。だから私はfflush(stdout)を使ってデータをフラッシュしようとしましたが、運がありませんでした。コードはこのように機能します。
Initialize the 2 sockets.
Initialize 2 threads.
One to get the data back through the data socket.
The other send the data.
And while sending all the data one while(true){sleep(1)} in the main function, because the data can take 1 second to be processed or one hour so i keep the program alive this way (Don't know if that is the better way).
読み取りと画面への送信に1つのスレッドだけを使用して、メインでしばらくの間、小さいバージョンを作成しました。
コード:
#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;
const int RCVBUFSIZE=2000;
char echoString[RCVBUFSIZE];
static void * _sendExec(void *instance);
int main(){
pthread_t m_thread;
int merror;
merror=pthread_create(&m_thread, NULL, _sendExec, NULL);
while(1){sleep(1);}
}
static void * _sendExec(void *instance){
int size;
for(;;){
while((size=read(fileno(stdin), echoString, RCVBUFSIZE))>0) write(fileno(stdout), echoString, size);
fflush(stdin);
fflush(stdout);
pthread_exit(0);
}
}
catfile.tar.gzを試してみてください| ./a.out | tar -zvt画面にすべてのデータが表示されているわけではないことがわかります。メインに置いて、スリープを解除しても問題ありません。問題は、データを戻す必要があり、時間がかかる可能性があることです。猫のfile.tar.gzを実行するのと同じです。ssh root @server"tar-zvt"。
人々に感謝します