チャットプログラムを作っているのですが、躓いています。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
helloworld1853
記事: 181
登録日時: 13年前

チャットプログラムを作っているのですが、躓いています。

#1

投稿記事 by helloworld1853 » 13年前

チャット(ジョーク)プログラムを作っているのですが、

ある箇所で躓いています。

以下がソースコードです。

余計な箇所は省略しました。

コード:

#pragma comment(lib, "wsock32.lib")
#include <stdio.h>
#include <winsock2.h>
#define PORT 80
#define BUFF_SIZE 1024

int crypt(char buff[BUFF_SIZE])
{
	int key = 1853;
	size_t i;

	for(i=0;i<strlen(buff);i++)
	{
        buff[i] ^= key;
    }
	return 0;
}
int main(void)
{
	 char buf[BUFF_SIZE];
         //省略
         if(recv(sock, buf, sizeof(buf), 0)!=SOCKET_ERROR)
         {
                  crypt(buf);//復元
                  if(buf =="test")//ここでのbufの内容は"test"でした。(デバッグで確認)
                  {
                           puts("成功");
                  }
                  else
                  {
                           puts("失敗");
                  }
         }
//省略
}
このチャットプログラムの通信はcrypt関数で暗号化されています。

結果は "失敗" でした。

判定の箇所のコメントを見ればわかりますが、

判定がうまくいっていないようです。

よろしくお願いします。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: チャットプログラムを作っているのですが、躓いています。

#2

投稿記事 by softya(ソフト屋) » 13年前

bufのポインタ値(アドレス)と"test"のポインタ値を比べていますので絶対に一致しません。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。


アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: チャットプログラムを作っているのですが、躓いています。

#4

投稿記事 by softya(ソフト屋) » 13年前

前々からポインタや文字列などの理解が曖昧だった気がしますので、この機会にちゃんと学習されることをおすすめします。
※ 過去ログを見なおしてみましたが何度かバイナリデータと文字列をちゃんと理解する様に指摘されています。

理解のため標準ライブラリのstrcmpなどを使わずに自分で関数を作るのも良いと思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

helloworld1853
記事: 181
登録日時: 13年前

Re: チャットプログラムを作っているのですが、躓いています。

#5

投稿記事 by helloworld1853 » 13年前

ありがとうございます。

http://homepage1.nifty.com/toshio-k/prog/c/string.html

ここのサイトを見て勉強します。
(ほかにもここのサイトがいいよ というのがありましたら お願いします。)

最後に 受信用のsocketと送信用のsocketを一緒に使っても

大丈夫なのでしょうか。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: チャットプログラムを作っているのですが、躓いています。

#6

投稿記事 by softya(ソフト屋) » 13年前

まず、ココとかでしょうね。

「ポインタ」 から4ページ
http://www9.plala.or.jp/sgwr-t/c/sec10.html
「ポインタ虎の巻」
http://www.nurs.or.jp/~sug/soft/tora/index.htm
「苦しんで覚えるC言語」 ここの13から14章。
http://9cguide.appspot.com/

>最後に 受信用のsocketと送信用のsocketを一緒に使っても大丈夫なのでしょうか。

受信と送信socketが分かられているならOKだと思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

helloworld1853
記事: 181
登録日時: 13年前

Re: チャットプログラムを作っているのですが、躓いています。

#7

投稿記事 by helloworld1853 » 13年前

どんなかんじで分けるのでしょうか。

connect関数からsocketが得られるのですが、

このsocketを別のsocketに代入して
(たとえば、socket=socket_recv というように)

使えばいいのでしょうか。

それとも何か別の処理をしなければならないのでしょうか。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: チャットプログラムを作っているのですが、躓いています。

#8

投稿記事 by softya(ソフト屋) » 13年前

チャットプログラムはTCPのサーバ・クライアント型なのでしょうか?
与えられる情報が断片すぎて答えにくいですが、connectでサーバ接続するTCP型なら1つのソケットで良いと思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

helloworld1853
記事: 181
登録日時: 13年前

Re: チャットプログラムを作っているのですが、躓いています。

#9

投稿記事 by helloworld1853 » 13年前

説明が不十分だったので 説明します。

チャット プログラムは

TCP で クライアントとサーバがあり、

クライアントとサーバとの間で接続が確立できたら

チャットがスタートします。

クライアントが文字列を送信したら

サーバ側が受信して今度はサーバ側が文字列を送信し、

クライアント側が受信する・・・を繰り返します。

このまま同じsocketを使用してプログラムを作るのですが、

ここまでで注意することはありませんか。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: チャットプログラムを作っているのですが、躓いています。

#10

投稿記事 by softya(ソフト屋) » 13年前

どのぐらいの事がやりたいか分からないですが、ちゃんとエラー処理も作れば問題ないと思います。
ただ、サーバーが毎回クライアントソケットをshutdownするならクライアントも毎回shutdownしないとダメでしょうね(その部分のコードは無いの推測です)。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

helloworld1853
記事: 181
登録日時: 13年前

Re: チャットプログラムを作っているのですが、躓いています。

#11

投稿記事 by helloworld1853 » 13年前

設計上毎回shutdownするのは

あまり好ましくありません。

この問題を回避する方法はありませんか。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: チャットプログラムを作っているのですが、躓いています。

#12

投稿記事 by softya(ソフト屋) » 13年前

どうしてshutdownするとマズイ設計が分かりませんがshutdownしなければ良いのでは?
※ 連続して接続したままのアプリをwinsockで書いたことがないので問題があるかも知れません。あるいは問題はないかも知れません。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

helloworld1853
記事: 181
登録日時: 13年前

Re: チャットプログラムを作っているのですが、躓いています。

#13

投稿記事 by helloworld1853 » 13年前

シャットダウンすることによって通信量が増えるということはありませんか。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: チャットプログラムを作っているのですが、躓いています。

#14

投稿記事 by softya(ソフト屋) » 13年前

helloworld1853 さんが書きました:シャットダウンすることによって通信量が増えるということはありませんか。
まぁ、接続を切るんですから少しは通信はありますね。FIN→ACK
どんな応答要求の厳しいチャットアプリを作るか存じませんがTCPである以上は通信の負荷はUDPより多くなります。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

helloworld1853
記事: 181
登録日時: 13年前

Re: チャットプログラムを作っているのですが、躓いています。

#15

投稿記事 by helloworld1853 » 13年前

その程度なのですね。

わかりました。ありがとうございます。

これで一通りの疑問は解決しました。

softyaさん、Dixqさん ありがとうございます。

helloworld1853
記事: 181
登録日時: 13年前

Re: チャットプログラムを作っているのですが、躓いています。

#16

投稿記事 by helloworld1853 » 13年前

ボタン押し忘れました。

いろいろと ぼーとしていますが これからもよろしくお願いします。

閉鎖

“C言語何でも質問掲示板” へ戻る