0バイトのデータの受信

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
shiro4ao

0バイトのデータの受信

#1

投稿記事 by shiro4ao » 15年前

TCPソケットで通信をしています。

相手から"a"で始まり"z"で終わるデータが送られてきます。
a1234567z なら 1234567 を送信しているとみなします。
ただし、通信内容は全て数字とします。
(つまり、aやzが区切りとして以外送られることはない)
以下のように書いたのですが、0バイトのデータ("az"と送られる)
がやってくると上手く処理してくれませんでした。
なにかうまくする方法はありますか?
それとも根本からおかしいのでしょうか?


int recvex (SOCKET s, char FAR * buf, int len,int flags )
{
int ret,ret2=0,i;
char *size,tmp1[4000],*tmp2,test[1000];
int n=0;

memset(test,'\0',1000);

ret= recv(s,tmp1,len, flags);

int limit =ret;
int mark=limit;
int pos=0;

while(pos<limit){
//aをさがす
if(tmp1[pos]=='a'){
mark=pos;
}
//zを探す
if(tmp1[pos]=='z'){
int pos03=pos;
pos=mark;

if(pos03>pos){
//データ部の切り出し
n=pos03-pos-1;//-14;
tmp2=new char[n];
memcpy(tmp2,&tmp1[mark+1],n);
memset(buf,NULL,sizeof(buf));

//0バイトのデータがきたとき
if(strstr(tmp1,"az")!=NULL){
memcpy(buf,&tmp2[0],1);
strcpy(buf,""); //bufに空のデータを入れる
MessageBox(NULL,"空っぽのデータが来ました","空っぽのデータ",NULL);
return 0;
}
//0ではないデータが来たとき
memcpy(buf,&tmp2[0],n);
strcpy(&buf[n],"\0");

MessageBox(NULL,buf,"bufの中身の確認",NULL);

}else{
return n;
}

pos=pos03;
}

pos++;
}


return n;
}
画像

mila

Re:0バイトのデータの受信

#2

投稿記事 by mila » 15年前

new char[0]していることが原因な気がしますが
やりたいことは要するにこんな感じですか?
int n;
char *p_a, *p_z;

if ((p_a = strchr(buf, 'a')) == NULL || (p_z = strchr(p_a, 'z')) == NULL) {
    buf[0] = '\0';
    return 0;
}
n = (int)(p_z - p_a - 1);
memmove(buf, p_a + 1, (size_t)n);
buf[n] = '\0';
return n;

shiro4ao

Re:0バイトのデータの受信

#3

投稿記事 by shiro4ao » 15年前

どうも上手くいかなかったようです。
原因は通信に数以外のデータが入ってるようでした。
別の方法を考えたいと思います。
ありがとうございました。

閉鎖

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