こんにちは。
VC++で開発を行っています。
TCP/IP接続(ストリーム型)のプログラムがうまく書けません。
UDP/IP接続は出来たのですが・・・。
TCP/IP接続で、送受信可能なプログラムを作りたいと思っています。
一つのアプリケーションで、サーバーとクライアントの役割を持たせたいのですが・・・。
不可能でしょうか??
VC++でTCP/IPを利用したプログラムのサンプルでも構いません。
なにか情報をお持ちの方、教えてください。
よろしくお願いします。

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

A 回答 (3件)

doleさんがどの程度の知識を持っておられるかわからないので、


TCP/IPとプログラム(スレッド)に関する知識はあるものとして回答致します。

>サーバ用、クライアント用でソケットを作らなくてはならないのですよね???

SVR、CLIそれぞれにポートを持たなくてはならないのでそうなります。

>ローカルマシンでテストする際、
>同じアプリケーションで作ったサーバーソケットに
>クライアントソケットを結びつけるのはむりですよね。。。。

1.一つのAP内にCLIとSVR二つのソケットを用意します。
2.SVRでリスニングし、CLIから自アドレスのSVRのポートにコネクトします。
3.SVRでアクセプトします。

これで通信は可能です。

この回答への補足

すばやいご解答どうありがとうございます。
クライアントがうまくサーバーにコネクトできなかったので、お伺いしました。
WSAEWOULDBLOCKというエラーが発生してしまうのです。。。
がんばってみます。
すいません.....

補足日時:2001/10/29 16:29
    • good
    • 0

回答としては可能です。



VC++を使用するのであればMFC(CSocket)を利用すれば簡単です。
製品に付属のヘルプ(MSDN)にソースが載っていますので、
そのまま流用できるかと思います。

この回答への補足

ありがとうございます。
具体的な方法を教えていただきたいと思うのですが
サーバ用、クライアント用でソケットを作らなくてはならないのですよね???
ローカルマシンでテストする際、同じアプリケーションで作ったサーバーソケットにクライアントソケットを結びつけるのはむりですよね。。。。
すいません、よろしくおねがいします。

補足日時:2001/10/29 15:21
    • good
    • 0

API関係のサンプルプログラムがあります、参考になればよいですが。


http://tokyo.cool.ne.jp/masapico/api_index.html
http://tokyo.cool.ne.jp/masapico/sample_index.html
以上です。

参考URL:http://tokyo.cool.ne.jp/masapico/api_index.html,http://tokyo.cool.ne.jp/masapico/sample_index.html
    • good
    • 0

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

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

このQ&Aを見た人が検索しているワード

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

QVC++6.0からVC++.NETへの変遷について

VC++がようやく分かり出したこの頃ですが、今日本屋に立ち寄ったら、なっ なんとVC++の本がほとんど無くなり、代わりにVC++.NETとVC#ばかりになっていました。

C#はVC++とは違うと聞いていたのですが、読んでみるとVC++.NETもかなり違ってました。
(かなり違うという表現は、各人の状況により意見が異なると思いますが)

私のような本を見ながらコードを打って勉強している初心者にとって、VC++.NETの本ではVC++6.0を動かすことができません。

今から勉強する人や本を買って勉強しようとしている人あるいは、コンパイラを手に入れようとしている人はVC++.NETに移行してしまわざるを得ないのでしょうか?

すでにVC++6.0を十分活用出来ている人も、時代の流れでNETやC#を勉強していかなければならないのでしょうか?

つまり、単なるバージョンアップとは一線をなす変更がなされたということなのでしょうか?

良くご存知の方見解をお願いします。

Aベストアンサー

すぐにではありませんが、.NETに移行せざるを得なくなるでしょうね。
ただ、開発環境という面では、VS.NETにはC++が含まれており、C++の部分は
従来のC++も利用できるようになっていて、これはアンマネージC++と呼ばれています。
C++で.NETのコードを作成する時は、マネージC++という拡張仕様で記述します。
また、従来のコードと.NETフレームワーク用コードを混在させてアプリケーションを
開発することもできます。これは、相互運用という形で説明されています。

ということですので、C++で習得したものが無駄になることはありません。
たぶん、.NET環境の開発には、C++よりもC#やVB.NETを利用することが
多くなると思いますが、C++を理解していることはプラスにはなってもマイナスには
なりませんので、頑張って下さい。

.NET関連のサイトを2つご紹介しておきます。ご参考に。
http://www.microsoft.com/japan/msdn/library/default.asp
http://www.atmarkit.co.jp/fdotnet/index.html

すぐにではありませんが、.NETに移行せざるを得なくなるでしょうね。
ただ、開発環境という面では、VS.NETにはC++が含まれており、C++の部分は
従来のC++も利用できるようになっていて、これはアンマネージC++と呼ばれています。
C++で.NETのコードを作成する時は、マネージC++という拡張仕様で記述します。
また、従来のコードと.NETフレームワーク用コードを混在させてアプリケーションを
開発することもできます。これは、相互運用という形で説明されています。

ということですので、C++で習得したもの...続きを読む

QCQ出版Interface誌12月号のVC++でのTCP/IPサンプルプログラムは127.0.0.1以外でも使える?

CQ出版Interface誌12月号のVC++でのTCP/IPサンプルプログラムは、

http://www.cqpub.co.jp/interface/download/contents.htm
”第1章 C言語で書くシンプルなWebサーバの製作”

このサイトからダウンロードしてCプログラムを見てみたところ、クライアント側のexeファイルを起動すると自動的に127.0.0.1へ接続するようになっているようですが、これだと同じパソコンのみにしか接続できないような気がするのですが、この部分を192.168.1.*のようなIPアドレスに変更すればサーバプログラムと、クライアントプログラムを別々のPCで通信できるようになると言うことでしょうか。

Aベストアンサー

訊くまでもないでしょう。
やってみればわかるやないの。

QVC++とVC#の違いを教えて下さい

VC++とVC#どちらを勉強したほうが就職に有利でしょうか
VC++とVC#何がちがうのでしょうか。
VC++は主に業務系アプリを作成するときに使う言語で
VC#は主に制御系アプリを作るときに作成する見たいな
違いも教えて下さい。

Aベストアンサー

> VC++とVC#どちらを勉強したほうが就職に有利でしょうか

どちらでも大した差はないと思いますが、VC++の方が応用範囲は広くなると思います。VC++をVC#をという視点ではなく、プログラミング言語としてC/C++, C#を、プラットフォームとしてWindowsのプログラミングを、.NETフレームワークを、という視点で勉強することをお勧めします。

> VC++とVC#何がちがうのでしょうか。

VC++はC++をベースにしていますが、マイクロソフト社の独自仕様がかなり入っています。.NET Frameworkなしでも動くプログラムをかけます。一方、C#は比較的新しい言語で文法的にはJavaに似ており、.NET Frameworkを前提に作られています。

.NET Frameworkを使うのであれば、VC++, VB, C#のどれを使っても出来ることは一緒です。

私は、自分で使うちょっとしたツールを作る時は C#を使い、使用環境の制約上 .NET Frameworkが使えないものや、ドライバを開発する場合、サンプルプログラムとしてソースコードを開示する場合にはVC++を使っています。

ちなみに、マイコン上で動作する制御用プログラムを開発する場合はどちらも使えず、H8マイコンやSHマイコンではHEW(ルネサスの統合開発環境)にGCCやルネサスのC/C++コンパイラを使って、C言語でプログラムを開発しています。

> VC++とVC#どちらを勉強したほうが就職に有利でしょうか

どちらでも大した差はないと思いますが、VC++の方が応用範囲は広くなると思います。VC++をVC#をという視点ではなく、プログラミング言語としてC/C++, C#を、プラットフォームとしてWindowsのプログラミングを、.NETフレームワークを、という視点で勉強することをお勧めします。

> VC++とVC#何がちがうのでしょうか。

VC++はC++をベースにしていますが、マイクロソフト社の独自仕様がかなり入っています。.NET Frameworkなしでも動くプログラムを...続きを読む

QVC++でのTCP/IPサンプルプログラムでClient.exeを複数起動すると通信できない

CQ出版Interface誌12月号のVC++でのTCP/IPサンプルプログラム

http://www.cqpub.co.jp/interface/download/contents.htm
第1章 C言語で書くシンプルなWebサーバの製作

このプログラムのserver.exeを起動させて、Client.exeを複数起動させてみたのですが、Client.exeの片方が通信できるのですが、網片方のClient.exeはサーバとの通信ができていないようで、通信できていた方のClient.exeを停止させると通信ができるようになるようです。

このプログラムではClient.exeが複数あった場合に同時に通信を行わせると言うことはできないのでしょうか?

http://www.youtube.com/watch?v=LNjYjAsz6Oc

Aベストアンサー

たった100行にも満たないプログラムなのに。。。
解析されてみたのでしょうか?
こんな事で一々質問されている事が心配です。

listenの引数で最大接続可能数が1となっているため、クライアントは一つしか許容出来ないようになっています。

参考URL:http://www.golgo.jp/winsock.html#l_listen

QVC++6で作成したDLLをVC++.NET2003から呼び出せますか

現在、VC++.NET2003で作成しています。あるメーカから提供されているDLLがあるのですが、そのDLLとのリンクまではできたのですが、実行するとエラーになってしまいます。
(プログラムが異常終了するのではないのですが、そのDLLからの戻り値がエラーになり、期待した結果が得られません。)
そのDLLはVC++6で作成したものらしく、マニュアルには、VC++6で作成したアプリケーションからの呼び出し方法が、記述されていました。
VC++6でアプリを作成すれば、正常に呼び出せることは明白なのですが、いかんせん、VC++.NET2003での開発が、ある程度進んでしまっていますので、いまからVC++6に切り替えるわけにもいきません。
それで、一般論として、確認したいのですが、VC++6で作成したDLLをVC++.NET2003で使用することは、出来ないのでしょうか。(これから、メーカにも確認する予定ですが、まずは、こちらで確認したく、投稿した次第です)

Aベストアンサー

> もし、原理的にVC++6のDLLをVC++.NETでも呼び出し可能なら、

呼び出すだけなら原理的には可能ですが、作り方次第では正しく動作しないと思います。
典型的なまずい例は、DLL側でmallocやnewなどで割付けたオブジェクトを呼び出し側で解放させる、またはその逆です。

結局のところ、DLLの作り方に強く依存しますので、想像だけではこれ以上分かりません。

QCQ出版Interface誌12月号のVC++でのTCP/IPサンプルプログラムを動作できない

Interface誌の12月号にMicrosoft Vistal C++ 2008 Express EdtionでのTCP/IPサーバ、クライアントのサンプルプログラムが下記のURLからダウンロードできるようになっており、


http://www.cqpub.co.jp/interface/download/contents.htm
”第1章 C言語で書くシンプルなWebサーバの製作”の項目


このサイトからダウンロードして、自分のPCでサーバとクライアントを両方CTRL + F5で起動させようとしたところ、サーバプログラムはちゃんと起動するのですが、クライアントを起動することができませんでした。雑誌の中ではちゃんと動くようなのですが、なぜ自分のPCでは動かないのか原因がわかりません。ご存じの方いらっしゃいましたら是非ご教授よろしくお願いいたします。

そのときの症状を映像で取りましたのでyoutubeにアップしておきます。

http://www.youtube.com/watch?v=Lhsmqw0xepM

Aベストアンサー

手元のはMicrosoft Visual Studio 2005なので、ソリューションは開けませんでしたが…
クライアント側のソースコードのドコにも
「7番ポートで接続待機中」と表示するコードがありません。
にも関わらず、動画内のクライアント側を実行した。
というところで
「7番ポートで接続待機中」
が表示されるのはおかしいと思いませんか?

Microsoft Visual Studio 2005の場合ですが、ソリューションエンスプローラから該当のプロジェクトを選択し、
右クリックで表示されるメニューから[デバッグ][新しいインスタンスを開始]で、起動できました。
# もっとも、Ctrl+F5のデバッグなしで起動とは違いますが…
# F5/Ctrl+F5で起動できるのはスタートアッププロジェクトに設定されている場合…でしょうか。
# ソリューションを選択して右クリック、[スタートアップ プロジェクトの設定]で、「現在の選択」にしておくと、自動で切り替わるようですが。(それでもデバッグ起動できるのは1つだけ)

QC#とVC++.NETについて教えて下さい。

質問タイトルが漠然としててごめんなさい。
特別なソフトを作る訳ではないのですが、暇プロレベルで最近やっと
苦労の末、.NET以前のVC++を理解できて、VC++ってMFC
を使う為の言語のだなーと思っている感じです。
C#は購入済みですが、まだ触ってません。VC++.NETは未購入
の状態です。

そこで質問なのですが、
 (1)WIN32アプリにはC#とVC++.NETどちらが適していますか?
 (2)VC++.NETはやはりMFC寄りの言語なのでしょうか?

インラインアセンブルとかもやりたいのですが、
 (3)VC++.NETではできますか?C#では?

C#は見た目がC言語でクラスも使えるのでVC++.NETとどう違う
のか良くわかりません。自分的にはC言語でなんでもやって行って、
C++はクラスが分かる程度で良しとしようと思っています。
詳しい方、漠然とした質問で申し訳ございませんが、ご教授お願いします。

Aベストアンサー

「VC++.NET」と書かれていますが
「Visual C++.NET 2003」及び「Visual C++.NET 2002」の事でしょうか?
2005からは「Visual C++ 2005」という表記になり表記から「.NET」ははずれました。
それと.NET Frameworkという言葉をご存知でしょうか?
C#は.NET Frameworkを使ったアプリケーションを作る為の言語です。

(1)
Win32APIを使ってプログラムをするなら普通VC++を使います。
C#はWin32APIの代わりに.NET Frameworkを使います。

(2)
従来通りMFCが使えます。(MFCのバージョンも上がっています。)
それとは別にC++から.NET Frameworkを使える
C++/CLIといものも選択できます。(2003ではマネージドC++と呼ばれていました)
(.NET Frameworkを使ったソフトを動かすには.NET Frameworkのランタイムが必要になります。)

(3)
VC++はインラインアセンブラを使うことが可能です。
C#はそんなに詳しくないですが多分無理です。
その代わりunsafeコード(インラインCみたいなもの)が使えます。

>C#は見た目がC言語でクラスも使えるのでVC++.NETとどう違う
>のか良くわかりません。
C#とC/C++はまったく違う言語です。例えばC#は基本的にポインタはありません。クラスの多重継承もできません。
単純なステートメント(文構造)が同じなだけです。
それならC++とJavaもステートメントは似ているといえます。

「VC++.NET」と書かれていますが
「Visual C++.NET 2003」及び「Visual C++.NET 2002」の事でしょうか?
2005からは「Visual C++ 2005」という表記になり表記から「.NET」ははずれました。
それと.NET Frameworkという言葉をご存知でしょうか?
C#は.NET Frameworkを使ったアプリケーションを作る為の言語です。

(1)
Win32APIを使ってプログラムをするなら普通VC++を使います。
C#はWin32APIの代わりに.NET Frameworkを使います。

(2)
従来通りMFCが使えます。(MFCのバージョンも上がっていま...続きを読む

QTCP/IP通信型大文字・小文字変換プログラム

TCP/IP通信型大文字・小文字変換プログラムを作りたいです。
しかし、うまく2つのプログラムが接続されません。
恐らく、IPアドレスやホスト名の問題だと思います。
超初心者でそこのところをあまり理解していません。
どなたかプログラムの補足をお願いします。

概要は
・クライアント
キーボードから文字列を入力し、サーバーに送信。
サーバーから送信された文字列を画面に出力。

・サーバー
クライアントから送信された文字列に対し、
大文字は小文字に、小文字は大文字に変換して返す。

クライアント側プログラム

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>

#define SOCK_NAME "./socket"

int main()
{
struct sockaddr_in saddr;
int soc;
char buf[1024];

if ( (soc =socket(AF_INET, SOCK_STREAM, 0 ) ) < 0 ) {
perror("socket");
exit(1);
}

memset((char *)&saddr, 0, sizeof(saddr));
saddr.sin_family = AF_INET;
saddr.sin_addr.s_addr=inet_addr("192.168.1.1");
saddr.sin_port=htons(1357);

if(connect(soc, (struct sockaddr *)&saddr, sizeof(saddr)) < 0) {
perror("connect");
exit(1);
}
fprintf(stderr, "Connection established: socket %d used.\n", soc);

while(fgets(buf, 1024, stdin)){
if(buf[strlen(buf) -1] == "\n") buf[strlen(buf) -1] = "\0";
write(soc, buf, 1024);
read(soc, buf, 1024);
fprintf(stdout, "%s\n", buf);
}
close(soc);
return 0;

}

サーバー側プログラム

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <unistd.h>
#include <sys/socket.h>
#include <arpa/inet.h>

#define SOCK_NAME "./socket"

int main()
{
int i;
int fd1, fd2;
struct sockaddr_in saddr;
struct sockaddr_in caddr;

int len;
int ret;
char buf[1024];

if((fd1 =socket(AF_INET, SOCK_STREAM, 0)) < 0 ){
perror("socket");
exit(1);
}

memset((char *)&saddr, 0, sizeof(saddr));
saddr.sin_family = AF_INET;
saddr.sin_addr.s_addr=INADDR_ANY;
saddr.sin_port=htons(1357);


unlink(SOCK_NAME);
if(bind(fd1, (struct sockaddr *)&saddr, sizeof(saddr)) < 0) {
perror("bind");
exit(1);
}
if(listen(fd1,5) < 0 ) {
perror("listen");
exit(1);
}
while(1){
len = sizeof(caddr);
if((fd2 = accept(fd1, (struct sockaddr *)&caddr, &len)) < 0){
perror("accept");
exit(1);
}

fprintf(stderr, "Connection established: socket %d used.\n", fd2);

while((ret = read(fd2, buf, 1024)) > 0 ){
fprintf(stderr, "read: &s\n", buf);
for(i=0; i<ret; i++)
if(islower(buf[i]))
buf[i] = toupper(buf[i]);
if(isupper(buf[i]))
buf[i] = tolower(buf[i]);

fprintf(stderr, "write: %s\n", buf);
write(fd2, buf, 1024);
}
close(fd2);
}
close(fd1);

return 0;
}

TCP/IP通信型大文字・小文字変換プログラムを作りたいです。
しかし、うまく2つのプログラムが接続されません。
恐らく、IPアドレスやホスト名の問題だと思います。
超初心者でそこのところをあまり理解していません。
どなたかプログラムの補足をお願いします。

概要は
・クライアント
キーボードから文字列を入力し、サーバーに送信。
サーバーから送信された文字列を画面に出力。

・サーバー
クライアントから送信された文字列に対し、
大文字は小文字に、小文字は大文字に変換して返す。

...続きを読む

Aベストアンサー

クライアント側でIPアドレスとして 192.168.1.1を指定していますけど
これはあってますか?

プログラムにバグがあったので、それを修正した上で
ループバックアドレス(127.0.0.1)を指定して試したところ
うまく動作しました。

いきなりサーバーとクライアント両方を試すより、
サーバーは正しく動くのか、
クライアントは正しく動くのか
をそれぞれ試すようにした方がよくはないですか。

サーバーのテストなら telnetでも試せますし。

QVC++プログラマーのアルバイトを未経験可、年齢不問で探しているのです

VC++プログラマーのアルバイトを未経験可、年齢不問で探しているのですが…
現在年齢は42歳です。
5~6年前からC言語を勉強し始め、現在はC++やVC++(MFC)を勉強するまでになったのですが、VC++プログラマーのアルバイトで雇ってくれる会社はありますか?
同じ未経験で入社するには若い人に比べて年齢でハンデがある分をスタートラインで差を付けようと思い、今でもVC++(MFC)の勉強を続けているのですがこれはあまり意味のないことですか?

Aベストアンサー

アルバイトということですが、どのような仕事をしたいのでしょうか?
単なるコーディングのみをやりたいのか、上流工程も含めた開発全体を経験したいのか質問内容からは読み取れません。
40代ということであれば、企業が求めるのは即戦力になる人ではないでしょうか?
プログラマーというよりは、システムエンジニアとして設計業務やマネジメントができる人が求められると思います。
仕事については、VC++(MFC)の開発業務の需要がどれだけあるかによると思います。
VC++にこだわるのであれば、VC++.netも挑戦したほうがアドバンテージがあると思います。
勉強しているから採用されると思っているなら、考えは甘いと思います。
企業は、どれだけVC++を使ってソフト開発を行ってきたかを見ると思います。
ここで質問するよりは、ハローワークや転職者向けの会社説明会などで質問したほうが良いと思います。

QTCP/IP通信型プログラムです。作成するのはクライアントです。たとえ

TCP/IP通信型プログラムです。作成するのはクライアントです。たとえば、サーバから入力を求められ、それが正しくあれば、次の状態へ。正しくなければ、状態を遷移させなかったり。そして、状態が遷移したということをサーバに伝えなければなりません。自分としては、条件式などを利用しようかと思っているのですが・・・。(状態遷移図の作成ではありません。)
ほんのわずかなヒントでもいいので、お助け願います。

Aベストアンサー

前回も書きましたが質問したい内容が何なのか分かりません

これだと じゃあ自分で書いてあることやれば? ってことになりますが
そういうのを期待してるわけではないんですよね?


人気Q&Aランキング

おすすめ情報