No.3ベストアンサー
- 回答日時:
実際送信するときはキャストしないとまずいですね
send(sock, (char*)&header, sizeof(header), 0);
何で大丈夫かというのはC++の理解度が高まったときにわかると思います
ただし構造体の中身がポインターやクラスだとうまくいきません
うまく送れるのは固定長のデータだけです
構造体のメモリを確保したときにどんな感じで確保されるかを理解できれば問題ないかと・・
さすがにそこら辺の詳しい解説はうまくできないのと最初の質問とかけ離れてしまうのがあるのでここでは控えさせていただきます
ありがとうございました。
>うまく送れるのは固定長のデータだけです
なるほど。
>構造体のメモリを確保したときにどんな感じで確保されるかを理解できれば問題ないかと・・
少し理解しました。
>さすがにそこら辺の詳しい解説はうまくできないのと最初の質問とかけ離れてしまうのがあるのでここでは控えさせていただきます
確かにその通りです。
No.2
- 回答日時:
そのような流れでいいと思います
プログラム的には次のようになると思います
// 送信側 -------------------------------
charheader[256] = {0};
sprintf(header, "%d", nFileSize);
send(sock, header, sizeof(header), 0);
send(sock, pFileBuffer, nFileSize);, 0);
// 受信側 -------------------------------
charheader[256] = {0};
recv(sock, header, sizeof(header), 0);
int nFileSize = atoi(header);
char *pFileBuffer = new char[nFileSize];
recv(sock, pFileBuffer, nFileSize, 0);
ヘッダー自体はchar型でなくても問題ないです
構造体を作って送ってしまった方が楽かも知れません
typedef struct tag_MyHeader
{
intnBufferSize;
charfileName[_MAX_FNAME+1];
// などなど
} MYHEADER;
などとしておき、
// 送信側 -------------------------------
MYHEADER header = {0};
header.nBufferSize = nFileSize;
strcpy(header.fileName, "abc.txt");
send(sock, header, sizeof(header), 0);
send(sock, pFileBuffer, header.nBufferSize);, 0);
// 受信側 -------------------------------
MYHEADER header = {0};
recv(sock, header, sizeof(header), 0);
char *pFileBuffer = new char[header.nBufferSize];
recv(sock, pFileBuffer, header.nBufferSize, 0);
printf("File [%s]を受信しました\n", header.fileName);
みたいにすれば問題ないと思います
No.1
- 回答日時:
MFC + socketならば
CSocketクラスかな?
-- ヘルプより抜粋 --
CSocket クラスは、CAsyncSocket クラスから派生し、Windows ソケット API のカプセル化を継承しています。
CSocket オブジェクトは、CAsyncSocket オブジェクトよりも高いレベルで Windows ソケット API の抽象化を表現しています。
CSocket は、CSocketFile と CArchive を組み合わせて動作し、データの送受信を管理します。
-- ヘルプより抜粋 --
なので、CSocket CSocketFile CArchive あたりを調べるといいかも
* 当方使い方は知りません
状況がわからないので簡単にネットワーク越しのPCにファイルを転送となると
1.ネットワークドライブを割り当ててファイルコピーを行う
2.自分独自のヘッダを付加し、転送する
たとえば256バイトのヘッダ情報をつける
送信側はヘッダ情報にファイルサイズを書いておく
送信側はまずヘッダ情報を送信する(256バイト)
続いてファイルの中身を転送する(ファイルサイズ)
受信側は最初にヘッダ情報のみを受信する(256バイト)
ヘッダ情報に従って残りのデータを受信する(ファイルサイズ)
上記2の方法だと色々応用が利くので個人的には好きです
この回答への補足
ご返答ありがとうございます。
>1.ネットワークドライブを割り当ててファイルコピーを行う。
これは考えていたのですが、いろいろ問題がありましたので、却下いたしました。
CSocketはこれから調べてみます。
> 2.自分独自のヘッダを付加し、転送する
イメージがわかないため、ご質問あります。
1. ヘッダー情報を作成する。例えば)sendコマンド等で"HD =ファイルサイズ"
2. その後、受信側で変数(recvのバッファーサイズに該当する?)にファイルサイズをを挿入
3. 送信側のファイルの中身を転送
4. 受信側でファイルを受信
という流れになるのでしょうか?
お聞きしてしまって申し訳ありませんが、よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 2 2023/07/21 10:51
- その他(プログラミング・Web制作) エクセルVBA 18 2022/06/11 17:19
- Android(アンドロイド) Aloha Browser でダウンロードしたファイルをPCに転送するには? 1 2022/05/23 18:54
- UNIX・Linux テキストファイルをページ番号付きでコマンドラインから印刷したい 1 2023/02/22 12:47
- Android(アンドロイド) Sumsung製SDXCカードの空き容量があるにも関わらず動画ファイルが転送できない 4 2023/03/02 13:52
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/08 11:02
- UNIX・Linux VirtualBox ゲストOSにPC内蔵HDDのパーティションをマウントする方法は? 2 2023/05/06 22:52
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- Visual Basic(VBA) VBAで特定の場所にあるCSVファイル(複数)から特定場所を抜き出してExcelに転記したいです。 11 2023/05/23 16:29
- Excel(エクセル) Excelで、別シートの表のステータスに伴った動的な自動転記をしたいです。 2 2023/06/14 15:56
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
TCP/IP通信時のサーバーからの受信
-
winsockでファイル転送
-
POP3S
-
WinSockでの通信プログラムがう...
-
UDP通信する時に、相手にどうや...
-
SIPがNATを越えられない理由
-
fsockopenのソケットが全然分か...
-
VB6のwinsockでconnectできない
-
Connectエラーが出てしまう・・...
-
UDP通信におけるbind関数について
-
Socket通信の0バイト受信について
-
ソケットでクライアントのipア...
-
ソケットのクローズについて
-
UDP通信(SNMP)したいが、うま...
-
ソケット通信
-
ソケットを用いた1対多通信につ...
-
Macターミナルで実行中のプログ...
-
逆コンパイルと逆アセンブルの...
-
緯度、経度の 10進法と 60進法...
-
イラストレーターCS4のシリアル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
TCP/IP通信時のサーバーからの受信
-
recv関数でフリーズしてしまう
-
Winsockで接続待ちタイムアウト...
-
UDP通信におけるbind関数について
-
エクセル VBA でのCOMポート...
-
Socket通信の0バイト受信について
-
VB6のwinsockでconnectできない
-
ソケットのrecvの戻り値が0
-
ソケットを用いた1対多通信につ...
-
UdpClient 送信元のIPアドレ...
-
ソケットでクライアントのipア...
-
UDP通信する時に、相手にどうや...
-
ソケット通信 同じポート番号...
-
同じLAN内パソコンのIPアドレス...
-
Connectエラーが出てしまう・・...
-
ソケットのクローズについて
-
CreateFile関数でCOMポートが開...
-
異なる言語間でのソケット通信...
-
C言語でHTTP1.1のキープアライ...
-
送信したデータの一部が文字化...
おすすめ情報