TCPIPにまつわるエラー – 固定ページ 2 – プログラミング – Home

通知
すべてクリア

[解決済] TCPIPにまつわるエラー

固定ページ 2 / 3

Sugi
 Sugi
(@Sugi)
ゲスト
結合: 19年前
投稿: 20
 

SOCKET_LISTENはどこで定義されているかです。
'bSOCKET_LISTEN' のエラー箇所以前になんらか問題があるのか
あと、{ }が閉じていない、;がない等だと
それ以降大量のエラーがでることはよくあります。
ヘッダファイルもエラーがあると、ソース側で大量にエラーを吐くこともあります。

'bSOCKET_LISTEN' をヘッダで定義ってことはないですよね


返信引用
陣
 陣
(@陣)
ゲスト
結合: 19年前
投稿: 19
Topic starter  

bSOCKET_LISTENは
BOOL bSOCKET_LISTEN = FALSE, bSOCKET_S = FALSE
で一番上の方で宣言してあり、そこから派生で他の所で使用している感じになっていました。
ヘッダで定義はしていなくソースファイルで宣言してありました。


返信引用
Sugi
 Sugi
(@Sugi)
ゲスト
結合: 19年前
投稿: 20
 

>そこから派生で他の所で使用している感じになっていました
これは他のソースを参照しているということでしょうか?


返信引用
Sugi
 Sugi
(@Sugi)
ゲスト
結合: 19年前
投稿: 20
 

あと
error C2501: 'bSOCKET_LISTEN' : 識別名を宣言するのに、型が指定されていませ
ん。
も気になりますどこかで同じ変数が宣言されていますか?
クリックしたらそのエラー位置へ移動しますよね


返信引用
陣
 陣
(@陣)
ゲスト
結合: 19年前
投稿: 19
Topic starter  

返信有難うございます。
他のソースを参照していると言うわけではなく他の場所で作成してある
if (bSOCKET_LISTEN) {//リッスンソケット用選択
if (closesocket(listen_s)) {
MessageBox(hDlg,リッスン・ソケットクローズ失敗,
Error,MB_ICONEXCLAMATION | MB_OK);
}
}
EndDialog(hDlg, IDOK);
return TRUE;
}

   MessageBox(hDlg, accept error, Error, MB_OK);
closesocket(listen_s);
bSOCKET_LISTEN = FALSE;
return TRUE;
}
}
if (closesocket(listen_s) != 0) {//accept関数が成功したら閉じること
MessageBox(hDlg, Error, Error, MB_OK);
return TRUE;
}
bSOCKET_LISTEN = FALSE;
bSOCKET_S = TRUE;
等です。


返信引用
Sugi
 Sugi
(@Sugi)
ゲスト
結合: 19年前
投稿: 20
 

今わざとエラーを再現させてみましたが、同様なエラーになるので
やはりどこかで }が一つ多いとかではないでしょうか?
bSOCKET_LISTEN = TRUE;//成功した場合
の前のあたりで括弧の数が合っているか確認してみてください。


返信引用
陣
 陣
(@陣)
ゲスト
結合: 19年前
投稿: 19
Topic starter  

Sugi様たびたび有難うございます。
括弧が多いのかと思って色々と見直してて、何も変わってはいないのですがエラーをもう一度確
認しようとしてコンパイルした所4つに減っていました。
最後に書いて頂いた場所
// 接続メッセージ受信のウィンドウプロシージャー
LRESULT CALLBACK WndProc(){

case FD_ACCEPT:
conn_s = accept(listen_s, (SOCKADDR *)&client , &client_addr);
return 0;
}

\受信管理画面ズヴァリ\ipmsav.cpp(403) : error C2046: 不正な 'case' です。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(404) : error C2065: 'conn_s' : 定義されていない識別子です。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(404) : error C2065: 'client' : 定義されていない識別子です。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(404) : error C2065: 'client_addr' : 定義されていない識別子です。
となっていました。

error C2501: 'bSOCKET_LISTEN' : 識別名を宣言するのに、型が指定されていませ
ん。
を改めて確認しようと思いまして実行したらエラーが消えてしまっていたので確認できずでし
た。
何もいじってないのですが・・・。


返信引用
Sugi
 Sugi
(@Sugi)
ゲスト
結合: 19年前
投稿: 20
 

361行の手前が怪しいかと思うのですが
ソースがわからないのでどこが悪いのかまでは予測できないですね(^^;


返信引用
Sugi
 Sugi
(@Sugi)
ゲスト
結合: 19年前
投稿: 20
 

えーっと(^^;
僕の参考に書いたものをそのままコピペしてますか??

例としてあげたものであって、動くようにコーディングはしてないので
そのまままる写しではエラーになりますが・・・
//error C2046: 不正な 'case' です。(switchがないため)


返信引用
陣
 陣
(@陣)
ゲスト
結合: 19年前
投稿: 19
Topic starter  

Sugi様有難うございます。
一応361行から前の部分を提示しておきます。
361行の手前は
//ソケット生成して、呼び出しまでの関数
int mystream(HWND hDlg, u_short uport)
{
SOCKADDR_IN saddr;
int nAsync;

listen_s = socket(AF_INET, SOCK_STREAM, 0);//リスンソケット
if (bind(listen_s, (SOCKADDR *)&saddr, sizeof(saddr))
                         == SOCKET_ERROR) ;
listen(listen_s , 1);
WSAAsyncSelect(listen_s, hDlg, MY_MSG, FD_ACCEPT);
return 0;

listen_s = socket(AF_INET, SOCK_STREAM, 0);//リスンソケット
if (listen_s < 0) {
if (WSAGetLastError() != WSAEWOULDBLOCK) {
MessageBox(hDlg,
               ソケットオープンエラー,Error,
               MB_OK | MB_ICONEXCLAMATION);
return -1;
}
} else {

MessageBox(NULL,ソケットオープンしました,socket成功,MB_OK);
}
bSOCKET_LISTEN = TRUE;//成功した場合←361行目

こんな感じですね


返信引用
陣
 陣
(@陣)
ゲスト
結合: 19年前
投稿: 19
Topic starter  

丸写しはしてないです。
Switch文も含めて書いたんですけど同様に出てくるんです。


返信引用
Sugi
 Sugi
(@Sugi)
ゲスト
結合: 19年前
投稿: 20
 

見る限りでなにか気になるところはないのですが
そのあたりコメントアウトしてエラーが変わったりしますか?


返信引用
陣
 陣
(@陣)
ゲスト
結合: 19年前
投稿: 19
Topic starter  

一応先ほどの部分をちょっと変えてみたのですが、
LRESULT CALLBACK WndProc(){

SOCKADDR from;
int fromlen;
int conn_s;

memset(&from, 0, sizeof(SOCKADDR));
fromlen = sizeof(from);

switch(){

case FD_ACCEPT:
conn_s = accept(listen_s, (SOCKADDR *)&from, &fromlen);
return 0;
}
}
と言った具合にエラーなんですけど、WndProcで関数が値を返せない可能性があるといわれまし
た。
値を入れてないからだと思うのですが、何を入れればいいのやら不明で・・・・。
switchの所は上の方から使っているmsgでいけると思ったのですが宣言されていないとの事なの
で宣言しなおしです。


返信引用
陣
 陣
(@陣)
ゲスト
結合: 19年前
投稿: 19
Topic starter  

ちなみにエラーは変わらなかったです。


返信引用
陣
 陣
(@陣)
ゲスト
結合: 19年前
投稿: 19
Topic starter  

WndProcの値に
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam){
と入れてswitchで宣言しました。

値が返せないエラーに関してはまったく変わらずです。
もしかしてこの部分の下に
LRESULT CALLBACK WinProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
とあるんですけどこれが邪魔してる感じですか?


返信引用
固定ページ 2 / 3

返信する

投稿者名

投稿者メールアドレス

タイトル *

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