構造体データの送信 – プログラミング – Home

通知
すべてクリア

構造体データの送信


ショコレ
 ショコレ
(@ショコレ)
ゲスト
結合: 20年前
投稿: 7
Topic starter  

いつもお世話になっています、C言語初心者のものです。

Visual C++でTCP/IPの勉強をしているんですけど

send関数でデータを送信する時に,char型の配列ではなくて

構造体にセットしたデータを送る場合、どのようにしたら良いでしょうか?

例)
send(CliSock, (char *)構造体, 1026, 0 )

上みたいにchar型にキャストして、一応の送信は出来るんですが

送ったデータがおかしなものになってしまいます。

また構造体の内容を,char型の配列に移し変えようともしたんですけど

これもダメでした。

どなたかよろしくおねがいします。


引用解決済
トピックタグ
Ban
 Ban
(@ban)
Prominent Member
結合: 5年前
投稿: 776
 

まず、どんな環境からどんなデータをどのように送った時、
どんな環境でどのように受信したらどんなデータになったか。
この辺りの情報を整理して提示してください。

バイナリの送受信は、コンパイラの設定に影響を受けることも
考えられますが、送信側も受信側も同一バージョンの VC を
使っているということですか?

あちらで指摘されたように、単にキャスト時にポインタと本体を
混同してるのか、データのバイトオーダなのか、パディングなのか、
メンバにポインタを含んでいて送信側のアドレスを送っているのか、
...もっと他のバグなのか。

その構造体がそのままシリアライズできるのかも不明、
具体的にどうダメだったのかも不明では、現物を見ていない
あなた以外の人には可能性がありすぎて絞りきれません。

# ちなみに「マルチポスト」を検索してみると分かりますが、
# 複数の掲示板に同一の質問をする行為は、マナー違反と見られて
# 回答者の心証を悪くすることがあります。
# 多くの回答者はたいていどちらも見てますし、ほとんど反応を
# 悪くする効果しかありませんので、止めておいた方が無難かと思います。


返信引用
KING・王
 KING・王
(@KING・王)
ゲスト
結合: 20年前
投稿: 122
 

TCP/IPを用いた、異なるOS間でのデータ通信をおこなった経験から一言。

構造体のアライメントは、大丈夫でしょうか?
また、エンディアンの問題は?

以前のWindowsと他のOSとの通信を行った際に、アライメント関係で問題があり、
構造体を1バイトアライメント(#pragma pack(1))で使用した経験があります。

このあたりも確認するために、パケットアナライザ(キャプチャ?)などで、
実際に通信されているTCP/IPのパケットの内容を確認してみましょう。


返信引用
アイススケーター
 アイススケーター
(@アイススケーター)
ゲスト
結合: 22年前
投稿: 280
 

構造体のアドレス指定がおかしいのではないでしょうか
変数定義とソース部を公開して下さい。


返信引用
Ban
 Ban
(@ban)
Prominent Member
結合: 5年前
投稿: 776
 

# 「VC++超初心者会議室」さんの方で
# 「12540 構造体のデータの送信」レスが伸びてます。
# (ご本人からの反応はまだないようです)


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました