現在下記の構造体をwinsockで送信しようとしています。
サーバーとクライアントを同一PCで立ち上げて、送受信した際は問題なくクライアントで受け取れたのですが
LANで繋がれた別PCで実験してみたところ、データが受け取れませんでした。
良くわからなかったので、char szResult[1024*5];を→char szResult[1024];とバイト数を減らしたところ無事に受信できました
同一PCだと受け取れて、LANで繋がれたPCだと受け取れないのはなぜでしょうか??
その時に使用していたコードを記します。単純にsendとrecvを行っていただけです。
//送信データの入った構造体
SQLRESULT Result;
//省略
//送信側
nRet = send(s,(char *)&Result,sizeof(SQLRESULT),0);
//受信するための構造体
SQLRESULT RecvResult;
//受信側
nRet = recv(s,(char *)&RecvResult,sizeof(SQLRESULT),0)
そこで、自分で調べてみて、以下の様にコードを書き直して見ました
//送信側
int server::senddata(WPARAM wParam){
	int i,nRet,nSendSize = 0;
	int dwSize;					//送信するバイト数
	char *lptr;					//構造体の先頭アドレスを格納するポインタ
	dwSize = sizeof(SQLRESULT);//送信バイト数の計算
	lptr = (char *)&Result;    //構造体の先頭アドレスを代入
	for(i = 0;i < nConnectCount;++i){
		if((SOCKET)wParam == MemData[i].s){
			while(nSendSize <= sizeof(SQLRESULT)){
				nRet = send(MemData[i].s,lptr,dwSize,0);
				dwSize -= nRet;//送信したバイト数を減算
				lptr += nRet;  //送信した分だけポインタを進める
				nSendSize += nRet;
				if(nRet == SOCKET_ERROR)
					return -1;
			}
		}
	}
	return 0;
};//受信側
int client::rcvData(){
	int nRcv = 0;
	char *recvptr = (char *)&Result;//ポインタの代入
	int nRcvSize = 0;
	int dwSize;
	while(nRcvSize <= sizeof(SQLRESULT)){
		nRcv = recv(s,(char *)recvptr,sizeof(SQLRESULT),0);
		nRcvSize += nRcv;			//受信バイト数を貯蓄
		recvptr += nRcv;			//受信した分ポインタを進める
		if(nRcv == SOCKET_ERROR)
			return -1;
	}
	return 0;
}
かなり不安が残るので、添削できる方が居たら、是非お願いいたします。
また、同一PCだと問題なく通信できて、LAN環境に出ると受信できなくなる理由を教えてください。お願いいたします。


 メニュー
 メニュー カレンダー
 カレンダー Clock
 Clock 最新メンバー
 最新メンバー 投稿数
 投稿数 Link to us
 Link to us カウンター
 カウンター