ページ 11

0バイトのデータの受信

Posted: 2010年9月15日(水) 23:40
by shiro4ao
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;
}
画像

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

Posted: 2010年9月16日(木) 00:25
by mila
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;

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

Posted: 2010年9月17日(金) 09:02
by shiro4ao
どうも上手くいかなかったようです。
原因は通信に数以外のデータが入ってるようでした。
別の方法を考えたいと思います。
ありがとうございました。