stackでのWinSock通信手段 – プログラミング – Home

通知
すべてクリア

stackでのWinSock通信手段


クリスタル
 クリスタル
(@クリスタル)
ゲスト
結合: 20年前
投稿: 11
Topic starter  

開発環境:VC++6.0

WinSockで
WSASend()時とWSARecv()時にstackを引数にして送受信したいのですが
受信時にアクセスバイオレーションが出ていまい強制終了してしまいます。

stack<char> st;
st.push( 'あ' );
st.push( 'い' );
st.push( 'う' );
WSASend( SOCKET,reinterpret_cast<LPWSABUF>(&st),1,(DWORD*)&st,0,NULL,NULL);
// 送信時はエラーは起きない。

// WSARecv()は別プロセスで受信。
stack<char> st; // 送信時と同じ型を宣言し引数に設定。
WSARecv(SOCKET,reinterpret_cast<LPWSABUF>(&st),1,(DWORD*)&st,0,NULL,NULL);

// 送信されたか確認の為表示。
while( !st.empty() )
{
cout << (char)st.top() << , ;
st.pop();
}

受信したstackを表示しても送信した文字は表示されず
st.pop()を行った瞬間にメモリエラーになってしまいます。

どのようにすればこの現象を回避できるのでしょうか?
御教授お願い致します。


引用解決済
トピックタグ
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

> stack<char> st;
> st.push( 'あ' );
> st.push( 'い' );
> st.push( 'う' );

char に2バイト文字は入らない。

> WSASend( SOCKET,reinterpret_cast<LPWSABUF>(&st),1,(DWORD*)&st,0,NULL,NULL);

第2引数の型が違う。
第4引数は…送信したバイト数でスタックをぶち壊すのか?

> WSASend()時とWSARecv()時にstackを引数にして送受信したいのですが

STL のクラスはモジュール境界やプロセス境界を越えさせないほうがよい。
送信側と受信側でメモリレイアウトやランタイムライブラリが違う可能性がある。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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