質問するログイン新規登録

質問編集履歴

7

もうわけがわからん

2018/02/28 07:19

投稿

notgoodpg
notgoodpg

スコア37

title CHANGED
File without changes
body CHANGED
@@ -21,17 +21,27 @@
21
21
  int nRet;
22
22
  CAsyncSocket sc;
23
23
  // シリアル通信
24
+ // なぜかうまくいくコード
24
- nRet = sc.Create();
25
+ //nRet = sc.Create();
25
- nRet = sc.AsyncSelect(FD_READ | FD_WRITE | FD_OOB | FD_ACCEPT | FD_CONNECT | FD_CLOSE);
26
+ //nRet = sc.AsyncSelect(FD_READ | FD_WRITE | FD_OOB | FD_ACCEPT | FD_CONNECT | FD_CLOSE);
27
+ //nRet = sc.Connect(_T("192.168.1.10"), 9000); // やってる事は同じはずなのにCAsyncSocketクラスそのままだとnRet==0になる
28
+ //if( nRet){
29
+ // return;
30
+ //}
31
+ //else {
32
+ // int hoge = WSAGetLastError(); // hoge == 10035となる。
33
+
34
+ // return;
35
+ //}
36
+
37
+ // 同じことしているはずなのに失敗するコード
38
+ if( !sc.Create()) return;
39
+ if( !sc.AsyncSelect(FD_READ | FD_WRITE | FD_OOB | FD_ACCEPT | FD_CONNECT | FD_CLOSE)) return;
26
- nRet = sc.Connect(_T("192.168.1.10"), 9000); // やってる事は同じはずなのにCAsyncSocketクラスそのままだとnRet==0になる
40
+ if( !sc.Connect(_T("192.168.1.10"), 9000){ // やってる事は同じはずなのにCAsyncSocketクラスそのままだとnRet==0になる
27
- if( nRet){
41
+ int hoge = WSAGetLastError(); // hoge == 10035となる。
28
42
  return;
29
43
  }
30
- else {
31
- int hoge = WSAGetLastError(); // hoge == 10035となる。
32
44
 
33
- return;
34
- }
35
45
  }
36
46
  ```
37
47
  ### 試したこと

6

!((int)0)で1になるわけないわな・・・

2018/02/28 07:18

投稿

notgoodpg
notgoodpg

スコア37

title CHANGED
File without changes
body CHANGED
@@ -23,8 +23,11 @@
23
23
  // シリアル通信
24
24
  nRet = sc.Create();
25
25
  nRet = sc.AsyncSelect(FD_READ | FD_WRITE | FD_OOB | FD_ACCEPT | FD_CONNECT | FD_CLOSE);
26
- nRet = sc.Connect(_T("192.168.1.10"), 9000); // サンプルのソリューションでnRet==1、自作のソリューションではnRet==0が返
26
+ nRet = sc.Connect(_T("192.168.1.10"), 9000); // やってる事同じずなのにCAsyncSocketクラスそのままだとnRet==0にな
27
- if( !nRet ){
27
+ if( nRet){
28
+ return;
29
+ }
30
+ else {
28
31
  int hoge = WSAGetLastError(); // hoge == 10035となる。
29
32
 
30
33
  return;

5

typo...

2018/02/28 06:57

投稿

notgoodpg
notgoodpg

スコア37

title CHANGED
File without changes
body CHANGED
@@ -19,7 +19,7 @@
19
19
  ```c++
20
20
  void CSerialDlg::OnButton1(){
21
21
  int nRet;
22
- CASyncSocket sc;
22
+ CAsyncSocket sc;
23
23
  // シリアル通信
24
24
  nRet = sc.Create();
25
25
  nRet = sc.AsyncSelect(FD_READ | FD_WRITE | FD_OOB | FD_ACCEPT | FD_CONNECT | FD_CLOSE);

4

追記

2018/02/28 06:47

投稿

notgoodpg
notgoodpg

スコア37

title CHANGED
File without changes
body CHANGED
@@ -9,9 +9,15 @@
9
9
  具体性を欠く質問になってしまい申しわけありませんがお知恵を貸していただければ幸いです。
10
10
  よろしくお願いいたします。
11
11
 
12
+ (追記依頼を受けて、出来るだけ追記)
13
+ ちなみに、サンプルではCASyncSocketを継承したクラスで接続を行っています。
14
+ といってもConnectなどのオーバーライドはせずOnConnectなどのイベント時の動作のみオーバーライドしています。
15
+ よって、該当のソースコードではCASyncSocketの関数が直接呼ばれています。
16
+
12
17
  ### 該当のソースコード
13
18
 
14
19
  ```c++
20
+ void CSerialDlg::OnButton1(){
15
21
  int nRet;
16
22
  CASyncSocket sc;
17
23
  // シリアル通信
@@ -23,6 +29,7 @@
23
29
 
24
30
  return;
25
31
  }
32
+ }
26
33
  ```
27
34
  ### 試したこと
28
35
  サンプルのほうに自作のソリューションで発生しているのと同様の現象を発生させようと目に付いた見慣れないマクロをコメントアウトしたりしましたが、接続が成功します。

3

サンプルが載せられない旨追記

2018/02/28 06:46

投稿

notgoodpg
notgoodpg

スコア37

title CHANGED
File without changes
body CHANGED
@@ -5,6 +5,8 @@
5
5
  この動作自体は[当然らしい](https://oshiete.goo.ne.jp/qa/1406750.html)のですが、すでにあるサンプルコードでは`Connect`の返り値が1です。
6
6
  サンプルコード通りに接続を完了させるために何が不足なのか分かりません。
7
7
 
8
+ なおサンプルは諸事情で貼り付けられません。
9
+ 具体性を欠く質問になってしまい申しわけありませんがお知恵を貸していただければ幸いです。
8
10
  よろしくお願いいたします。
9
11
 
10
12
  ### 該当のソースコード

2

ソースコードがおかしかったので修正

2018/02/28 06:43

投稿

notgoodpg
notgoodpg

スコア37

title CHANGED
File without changes
body CHANGED
@@ -13,8 +13,8 @@
13
13
  int nRet;
14
14
  CASyncSocket sc;
15
15
  // シリアル通信
16
- nRet = m_cSocket.Create();
16
+ nRet = sc.Create();
17
- nRet = m_cSocket.AsyncSelect(FD_READ | FD_WRITE | FD_OOB | FD_ACCEPT | FD_CONNECT | FD_CLOSE);
17
+ nRet = sc.AsyncSelect(FD_READ | FD_WRITE | FD_OOB | FD_ACCEPT | FD_CONNECT | FD_CLOSE);
18
18
  nRet = sc.Connect(_T("192.168.1.10"), 9000); // サンプルのソリューションではnRet==1、自作のソリューションではnRet==0が返る
19
19
  if( !nRet ){
20
20
  int hoge = WSAGetLastError(); // hoge == 10035となる。

1

質問の内容を更新

2018/02/28 06:11

投稿

notgoodpg
notgoodpg

スコア37

title CHANGED
File without changes
body CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  CASyncSocketでデバイスとやり取りをするために、サンプルコードに倣って接続を行う関数を作成しました。
4
4
  ですが`CASyncSocket::Connect`関数の返り値は0(==FALSE)で`WSAGetLastError`でエラーコードを取得すると`10035`が得られました。
5
- この動作自体は当然のようなのですが、すでにあるサンプルコードでは`Connect`の返り値が1です。
5
+ この動作自体は[当然らしい](https://oshiete.goo.ne.jp/qa/1406750.html)のですが、すでにあるサンプルコードでは`Connect`の返り値が1です。
6
6
  サンプルコード通りに接続を完了させるために何が不足なのか分かりません。
7
7
 
8
8
  よろしくお願いいたします。