環境:Windows2000とWindows2000(サーバに見立てて)

WinScok2にてサーバソケットAPを作ったのですが、
クライアントからの接続でタイムアウトエラーになります。
以前にPC側APとサーバAPでポートが同じでなければいけないと言われ修正したのですが、まだ接続できません。
以前の方にも言われたのですが、サーバAPを起動後にプロンプトからtelnet (リスンされたIP) (ポート番号)で起動すると、接続に失敗しました。とメッセージが表示されます。

サーバAPはaccept()で待っている状態です。

何か洩れている箇所があるのでしょか?

このQ&Aに関連する最新のQ&A

A 回答 (3件)

>PC側APとサーバAPでポートが同じでなければいけないと言われ


そんなことはないですよ。
Listenポートは指定しますが、クライアント側は、OSから割り当てられたものを
使うのが普通のやり方です。そうしないと困ることがあるはずです。
(Webサーバを稼動させていると、Webクライアントになれないとか...)

>telnet (リスンされたIP) (ポート番号)で起動すると、接続に失敗しました
accept以前に問題がありそうですね。
ソケットの生成(socket)、バインド(bind)、listen でエラーは出ていませんか?
http://www.katto.comm.waseda.ac.jp/~katto/Class/ …

参考URL:http://www.katto.comm.waseda.ac.jp/~katto/Class/ …
    • good
    • 0
この回答へのお礼

ありがとうございます。
ポート番号が違うため、接続できませんでした。

お礼日時:2003/09/10 14:23

まずは、サーバ側APに問題があるのか、クライアントAPに問題があるのか切り分けるのが早道でしょう。



サーバAPなるものを起動した状態で、サーバ側のコマンドプロンプトから、
netstat -a
と打ってみてください。以下のようなリストが表示されるはずです。

C:\Documents and Settings\tamamori>netstat -a

Active Connections

Proto Local Address Foreign Address State
TCP Sirius:epmap Sirius:0 LISTENING
TCP Sirius:microsoft-ds Sirius:0 LISTENING
TCP Sirius:1025 Sirius:0 LISTENING
TCP Sirius:1027 Sirius:0 LISTENING
TCP Sirius:3541 Sirius:0 LISTENING
TCP Sirius:5000 Sirius:0 LISTENING
  :
  :
  :

このリストに、あなたのサーバAPがlistenしているはずのポート番号は表示されていますか?
(注意:80などのwelknown portは、httpなどのようにプロトコル名で表示されます。)

ここまでOKなら、サーバAPは目的通り、accept()待ちになっていると考えて良いでしょう。

次に、同じくサーバ側のコマンドプロンプトから、
telnet localhost ポート番号
と打ってみてください。

つながりますか?
というか、繋がるはずです。

ここまできたら、疑うのはクライアント側APまたは、クライアントマシンとサーバマシンを繋いでいる部分です。(ハード的に部分とソフト的な部分があります。)

参考まで。
    • good
    • 0
この回答へのお礼

ありがとうございます。
ポート番号が違うため、接続できませんでした。

お礼日時:2003/09/10 14:23

待つのはlisten()では?

この回答への補足

デバックで見る限りではacceptのような気がします。

補足日時:2003/09/10 14:19
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

QE39Aに適合するショックアブソーバ

ご存知の方がいれば、教えてください。
E39A(VR4)のショックアブソーバを社外品に交換しようと考えてます。
候補はカヤバのNEW SR SPECIALを考えています。しかしながら、メーカホームページには90年7月までしか対応できないように記載されており、90年12月登録の私の車には使用できないように見えます。
90年8月以降のE39A(VR4)でNEW SR SPECIALをご利用の方、いらっしゃいませんでしょうか。また、利用可否をご存知の方いらっしゃいませんでしょうか。事情があり、早急に知りたいと考えております。
何卒、ご回答のほどよろしくお願いいたします。

Aベストアンサー

古いGABのカタログで調べたところ(95,97年)、E39AギャランVR4は 87/10~92/3まで同じショックアブソーバーで大丈夫だと思います。

KYBのカタログが無いので、はっきりは分かりませんが、ABSが付いていたら、配線を留めるブラケットが無いのかもしれません。

Qクライアント サーバ(Win2000)間ソケット通信について

クライアントの通信APLをDebugするのに、仮のサーバ(Win2000)に接続するのですが、サーバ側の通信APを
どう開発していいのか?本等にはUNIXのAPのサンプルは
あるのですが、WINサーバのサンプルがありません。
教えてください。

Aベストアンサー

> telnet (サーバ側のIP) (19485)
> 接続中: xxx.xx.x.xxx...ホストへ接続できませんでした ポート番号 19485 : 接続に失敗しました
> と出力されます。

サーバ側APのbindが、ポート19485で正しくできていないのだと思います。

> 気になるのは、サーバ側でAPをコマンドプロンプトからコマンドを発行してるのですが、
> 入力プロンプトが直ぐに返ってきます。ただ、 タスクマネージャーで見るとプロセスが起動されています。
> 非同期なのですか?

同期/非同期は、アプリの実装に依存します。

「コマンドプロンプトからコマンドを発行」が何を指しているかが分かりませんが、
acceptが即時リターンされ、EWOULDBLOCKなどが返ってきているのであれば
非同期ソケットとして動いているのでしょう。

> サーバ側のAPなのですが、VisualStadioVer6.0にてWin32Applicationにて作成したのですが、
> WinMain()で書きださないとリンク時にエラーになります。

WinMain関数は、いわゆるWin32アプリケーションにおける
main関数だと思ってください。

printf等の標準入出力を使いたいのであれば、
プロジェクトの新規作成→Win32 Console Application で、
HelloWorldアプリケーションをスケルトンに選択すれば分かりやすいと思います。

> telnet (サーバ側のIP) (19485)
> 接続中: xxx.xx.x.xxx...ホストへ接続できませんでした ポート番号 19485 : 接続に失敗しました
> と出力されます。

サーバ側APのbindが、ポート19485で正しくできていないのだと思います。

> 気になるのは、サーバ側でAPをコマンドプロンプトからコマンドを発行してるのですが、
> 入力プロンプトが直ぐに返ってきます。ただ、 タスクマネージャーで見るとプロセスが起動されています。
> 非同期なのですか?

同期/非同期は、アプリの実装に依存します。
...続きを読む

Qselect(ソケット)

ソケットを用いてプログラミングしていると、よく出てくると思うのですが、次の意味を教えてください。
select(SH); $| = 1; select(STDOUT);
$|(特殊記号)やSTDOUTなど、なるべる細かく教えて頂けると幸いです。
よろしくお願いします。

Aベストアンサー

ソケットは効率的な処理をするために通常はバッファリングするモードになっています。
(その都度処理するよりある程度やりとりするデータが溜まってまとめてやったほうが効率的)

これを回避(フラッシュ)したいときにselect(SH)のように
ソケットを選んで$|=1 でフラッシュモードに切り替えています。
詳しくないのですがプログラミングにおいてフラッシュが用いられるのは、ソケット通信で双方向にやり取りするときが多いと思います。
ちなみにソケットをclose(SH)すると自動的にフラッシュしてくれます。

また、デフォルトではSTDOUTが選択状態になっていますので
> print "hello.\n";

> print STDOUT "hello.\n";
の省略形というわけです。

余談ですが、Perl使いは面倒くさがりが多いので慣用句みたいに
> select((select(SH),$|=1)[0]);
と、まとめて書く人もいます。
これはselectが返す値が直前まで選択されていたソケットだからできる技です。

ソケットは効率的な処理をするために通常はバッファリングするモードになっています。
(その都度処理するよりある程度やりとりするデータが溜まってまとめてやったほうが効率的)

これを回避(フラッシュ)したいときにselect(SH)のように
ソケットを選んで$|=1 でフラッシュモードに切り替えています。
詳しくないのですがプログラミングにおいてフラッシュが用いられるのは、ソケット通信で双方向にやり取りするときが多いと思います。
ちなみにソケットをclose(SH)すると自動的にフラッシュしてくれま...続きを読む

QBCC Developer開発環境でソケット通信プログラムは作れる?

最近、”14歳からはじめる リアルに動くゲーム物理プログラミング”という本を買い、無料で使えるBCC Developerという無料コンパイラを使って見たのですが、このコンパイラでTCP/IP通信なんかのプログラミングもできるんでしょうか。わかる方いらっしゃったらご教授お願いいたします。

Aベストアンサー

できるかもしれません。

コンパイラ依存の物を使用していないなら可能だと思います。
ソケットプログラミングのサンプル:http://x68000.q-e-d.net/~68user/net/

他にもFTP転送ソフトのFFFTPはオープンソースですので
コンパイルできるか試してみてはいかがでしょうか?
http://www2.biglobe.ne.jp/~sota/ffftp.html

Qプラグ、ソケットとオス、メスの違い

質問させていただきます。
コネクタを買おうとカタログを見ていたときに
気づいたのですが、
ある商品ではプラグ、ソケットという表記がなされていて、ある商品ではオス、メスという表記がなされていました。
ここで質問なのですが、プラグ、ソケットとオス、メスの違いというのは何なのでしょうか?
よろしくお願いします。

Aベストアンサー

これについては特に決まりはないでしょう。実際私もそれらを扱う仕事をしていますが。同じ物をオスと呼んだりプラグと呼んだりしますし、どちらでも問題なく通用します。また、英語でも図面上にMALE・FEMALE(男性・女性)という表記がある場合もあります。

これは私の個人的な意見で確証はありませんが、プラグ・ソケットというのが多分正式な呼び方でしょう。また、形状によってはソケットを(たとえばフォーンプラグやRCAプラグに対する物)などはジャックと呼ぶ場合もあるようですが、いずれにせよ問題なく通じますの。電気以外でも配管などでも同様な表記をしますし呼び方もします。

技術者の使う用語というのは、結構こう言った一種の業界用語めいたものが多いのです。たとえば少々古いですが半導体素子を「石」と呼んだりします。

QTCP/IP: 非ソケットに対するソケット操作です?

UNIX/gcc。
TCP/IPでチャットプログラムを作っているんですが
ログアウトメッセージなるものを送る前に
sendto() sent a different number of bytes than expected: Socket operation on non-socketというエラーが出ます。
起こる箇所:クライアント
msgStruct.option = htonl(option);
msgStruct.seatLog = htonl(loggedIn);
if (sendto(sock, &msgStruct, sizeof(msgStruct), 0, (struct sockaddr *)
&echoServAddr, sizeof(echoServAddr)) != sizeof(msgStruct)) {
printf("sizeof(msgStruct): %d\n", sizeof(msgStruct));
DieWithError("sendto() sent a different number of bytes than expected");

これはどういうときに起こるのでしょうか?
このエラーが起こり始めたのはファイルの中のポート番号の値を変えてからです。
元通りにポート番号をコマンドの引数から得た値に直せば
このエラーは消えますが、そうするとチャットプログラムとして動作しなくなってしまいます。

//これで各自のクライアントが独自のポート番号を持てます
echoDummyAddr.sin_port = 29990 + (unsigned short)recordNumber;
//元々はechoServPort = atoi(argv[1]);で得た値を送ってました

loggedIn = logIn(option, msgString, seatLog, inet_ntoa(echoClntAddr.sin_addr), echoDummyAddr.sin_port);

関数側(端折ってます):
int logIn(int option, char *id, int loggedIn, char *ip, unsigned short portNum)
{
FILE *file_ptr;
user record_file;
record_file.portNum = portNum;

fwrite(&record_file, sizeof(record_file), 1, file_ptr);
fclose(file_ptr);
}
return loggedIn;
}
小さなヒントでもいいですから、どうか宜しくお願いします。

UNIX/gcc。
TCP/IPでチャットプログラムを作っているんですが
ログアウトメッセージなるものを送る前に
sendto() sent a different number of bytes than expected: Socket operation on non-socketというエラーが出ます。
起こる箇所:クライアント
msgStruct.option = htonl(option);
msgStruct.seatLog = htonl(loggedIn);
if (sendto(sock, &msgStruct, sizeof(msgStruct), 0, (struct sockaddr *)
&echoServAddr, sizeof(echoServAddr)) != sizeof(msgStruct)) {
printf("sizeof(msgStruct): %d\n", ...続きを読む

Aベストアンサー

このエラー(Socket operation on non-socket)
がでるのは、sockの値が破壊され、0になっていると考えられます。
sockはint型で確保されているはずので、printf文で、
sentoを呼び出す前に、sockの内容を表示してみては如何でしょうか。(エラーが発生したときに表示でもかまいませんが)
また、力づくになりますが、いたるところにprintf文をいれる方法もあります。
printf("sock=%d\n",sock);
又は、
sock = socket()のあとで
sock_save = sockとして(sock_saveはint型)
if (sock != sock_save) printf("sock=%d\n",sock);
とする手もあります。(sockが破壊された時に印字される)
そのとき
printf("src=%s line=%d sock=%d\n",__FILE__,__LINE__,sock);とすると、このprintfを実行した、ソース名と行番号も表示されますので、この方がよいかもしれません。

このエラー(Socket operation on non-socket)
がでるのは、sockの値が破壊され、0になっていると考えられます。
sockはint型で確保されているはずので、printf文で、
sentoを呼び出す前に、sockの内容を表示してみては如何でしょうか。(エラーが発生したときに表示でもかまいませんが)
また、力づくになりますが、いたるところにprintf文をいれる方法もあります。
printf("sock=%d\n",sock);
又は、
sock = socket()のあとで
sock_save = sockとして(sock_saveはint型)
if (sock != sock_save) pr...続きを読む

QJAVAでソケット通信(クライアント)の際のbind方法

JAVA初心者です。
アクセス元のIPアドレスで認証をしているサイトがあり、
httpアクセスでそこから定期的に情報を取ってくるようなものを
JAVAで作っています。
対象サイトは複数あり、それぞれに許可されているIPアドレスは別になるため、socketを使い、IPアドレスをbindしたいのですがうまくいきません。

~~前略~~
Socket socket = new Socket(Host, 80);
bind(socket,"IPアドレス");
~~後略~~

もしくは
~~前略~~
Socket socket = new Socket();
bind(socket,"IPアドレス");
~~後略~~

など、いずれもうまくいきません。なお、クライアントマシンには使用するIPアドレスは全て定義済みです。
また、アクセス元(JAVAが動くPC)のIPアドレスを指定せず
デフォルトのままでアクセスする事自体は
~~前略~~
// Hostの内容はyahoo.co.jp等特にアクセスの制限の無いサイトのもの
Socket socket = new Socket(Host, 80);
~~後略~~
とすることで接続出来ました。

皆さんの知恵を貸していただければと思います。
アドバイスよろしくお願いいたします。

JAVA初心者です。
アクセス元のIPアドレスで認証をしているサイトがあり、
httpアクセスでそこから定期的に情報を取ってくるようなものを
JAVAで作っています。
対象サイトは複数あり、それぞれに許可されているIPアドレスは別になるため、socketを使い、IPアドレスをbindしたいのですがうまくいきません。

~~前略~~
Socket socket = new Socket(Host, 80);
bind(socket,"IPアドレス");
~~後略~~

もしくは
~~前略~~
Socket socket = new Socket();
bind(socket,"IPアドレス");
~~...続きを読む

Aベストアンサー

> ~~処理~~
ここがどうなっているのか分からないので、何とも言えないのですが、
単にBind、Connectするだけなら以下の通りです。

//ホスト名(xxxx)、ポート番号(yy)からアドレスを作る
InetAddress a = InetAddress.getByName("xxxx");
InetSocketAddress b = new InetSocketAddress(a, yy);
//ソケットを作る
Socket s = new Socket();
s.bind(b);  //Bindの例
s.connect(b); //Connectの例

Qローカル側のC#から、リモートサーバ側のMySQLに接続する方法

さくらインターネットの専用サーバにMySQLを設置しています。

ローカルPC(私の自宅PC・Windows XP)で
VC#2008にて、専用サーバのMySQLに繋ぎ、
データベース操作(select等)を行いたいのですが、
可能でしょうか?

現在、ローカルPCに、MySQL Connector Net 6.2.2をインストールし、
MySql.Data.dllを参照設定でVC#2008の開発中のプロジェクトに
追加しています。

コードは下記URLのソースコードと殆ど同じです。
DB接続情報は勿論専用サーバのMySQLへの接続情報を
設定していまして、Data Sourceには、
localhostを設定しています。

http://hades.arrow.jp/blog/2008/08/cmysql3.html

下記も記述しています。
using MySql.Data.MySqlClient;
using MySql.Data.Types;

実行しますと、下記のステップで失敗します。
// 接続を開く
myConn.Open();

Unable to connect to any of the specified MySQL hosts

というエラーメッセージが出てきます。

以上、問題が分かる方、よろしくお願いします。

さくらインターネットの専用サーバにMySQLを設置しています。

ローカルPC(私の自宅PC・Windows XP)で
VC#2008にて、専用サーバのMySQLに繋ぎ、
データベース操作(select等)を行いたいのですが、
可能でしょうか?

現在、ローカルPCに、MySQL Connector Net 6.2.2をインストールし、
MySql.Data.dllを参照設定でVC#2008の開発中のプロジェクトに
追加しています。

コードは下記URLのソースコードと殆ど同じです。
DB接続情報は勿論専用サーバのMySQLへの接続情報を
設定していまして、Data Sou...続きを読む

Aベストアンサー

専用サーバが、管理者権限全権ありなら、MySQL用のポートを開けておけば接続できるでしょうね。
一般的にはセキュリティの関係などでやらないですが。

やるとしたらSSH経由のMySQL接続ですかね。
http://dev.mysql.com/doc/refman/4.1/ja/windows-and-ssh.html

通信が暗号化されるのでってところが、どうしてもやらないといけないとしたら、使う理由。

VPNで接続できるなら、その選択もありですが。
http://www.itmedia.co.jp/help/howto/linux/vpn/

こちらも暗号化面で比較的安全。

SSHにしても、VPNにしても過信は禁物として。

SSHの欠点は、アプリの作り方か難しくなる、もしくはユーザの利便性が悪くなると言うこと、利点はサーバ上でデフォルトでインストールされている事が期待できる事。
VPNの欠点はサーバにデフォルトではインストールされていないだろう、ということ、利点はリモートとは言えLAN扱いなのでアプリ構築、ユーザ操作は楽ということ。

QAndroid Socket.connectエラー

Androidでソケット通信するプログラムを作っています。

PC側がソケットサーバーをたてて(accept)、
Android側でクライアントとして接続(connect)するようにしています。

connectを実行している部分のソースは以下のようにしています。

-----------------
String ip = "192.168.XX.XX"; <-PCのIPアドレス
int port = 9999;

socket = new Socket();
InetSocketAddress addr = new InetSocketAddress(ip, port);
try{
socket.connect(addr);
return true;

}catch(IOException e){
e.printStackTrace();
return false;
}
------------------

上記やり方でまずはエミュレータで試したところうまく行きました、その後
実機に入れて同じように実行したところconnectのところで例外が飛んできます。
メッセージは"no route to host"でした。

実は全く同じソースで以前は実機でもできていたはずなんですが、
最近試したところできなくなっているようでした。

Android端末はXperia Arcですが、OSを2.3.4にバージョンアップしたことくらいで
以前と特に変わったところはないと思うのですが

原因として何が考えられるでしょうか?
よろしくおねがいします。

Androidでソケット通信するプログラムを作っています。

PC側がソケットサーバーをたてて(accept)、
Android側でクライアントとして接続(connect)するようにしています。

connectを実行している部分のソースは以下のようにしています。

-----------------
String ip = "192.168.XX.XX"; <-PCのIPアドレス
int port = 9999;

socket = new Socket();
InetSocketAddress addr = new InetSocketAddress(ip, port);
try{
socket.connect(addr);
return true;

}catch(IOException ...続きを読む

Aベストアンサー

無線LANで接続してないからですよ。

通常はUSBでの通信はフラッシュメモリと同じ扱いなので。

もし本当にUSBで以前できたなら擬似ロケーションの設定等をみてください。

Qwindows2000でC++の環境を整えたいと思っています。

windows2000でC++の環境を整えたいと思っています。

使用するアプリケーションの都合上、windows2000を使わざるを得ない状況です。
C++の環境を整えようと思いvisual studio2008をインストールしようとしたら
windows2000にはインストールできないとのことでした。

この場合、新たにvisual studio2005を買うなどしなければC++をインストールすることは
不可能ということでしょうか。
他に方法がありましたら教えてください。よろしくお願いします。

(パソコンを買い換えるということも考えておりますが、windows2000で使えるようになると一番嬉しいです!)

Aベストアンサー

visual studio2008は無理ですね。
visual studio2005 Express Edtionでしたら書籍の付録CD-ROMとかに入っていたのもあるはずですから、そう言うのを探してみるのも手です。
他にはgccとかBorland C++ Compiler 5.5を使う手もあります。


人気Q&Aランキング

おすすめ情報