掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ネットワークプログラミング (ID:52432)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
はじめまして、とらです。 ネットワークプログラミングについての質問です。 下のとき(送信 : 76 * 23 = 1,748)はうまくいくのですが、 PrtScSend関数の4行目 : while( m_i <= 23 ) それ以上(送信 : 76 * 46 = 3,496)送信しようとするとうまくいきません。 PrtScSend関数の4行目 : while( m_i <= 46 ) パケットアナライザで、パケットをみてみると うまくいっているときは(送信 : 76 * 23 = 1,748)、 サーバーにすべてのパケットを送信し終わってから サーバーからクライアントにACKが返されているのですが、 クライアント → サーバー ACK : 1,460 PSH , ACK : 440 サーバー → クライアント ACK うまくいっていないときは(送信 : 76 * 46 = 3,496)、 サーバーにすべてのパケットを送信し終わるまえに サーバーからクライアントにACKが返されてしまいます。 クライアント → サーバー ACK : 1,460 ACK : 1,460 サーバー → クライアント ACK クライアント → サーバー PSH , ACK : 728 サーバー → クライアント ACK 今うまくいっていないものも、 サーバーにすべてのパケットを送信し終わってから サーバーからクライアントにACKが返されるようにしたいのですが、 (そこがうまくいっていない理由と考えているので) どのようにすればいいのか、アドバイスを頂ければと思います。 //////////////////////////////////////////////////////CEkssSock void CEkssSock::OnSend(int nErrorCode) { //エラーが発生していない場合 if( nErrorCode == 0 ){ //CEkssDlg::OnSend関数を呼び出す ( ( CEkssDlg* ) m_pdDlgWnd ) -> OnSend(); } } void CEkssSock::OnReceive(int nErrorCode) { //エラーが発生していない場合 if( nErrorCode == 0 ){ //CEkssDlg::OnReceive関数を呼び出す ( ( CEkssDlg* ) m_pdDlgWnd ) -> OnReceive(); } } //////////////////////////////////////////////////////CEkssDlg void CEkssDlg::OnTimer(UINT nIDEvent) { if( nIDEvent == 1 ){ //PrtScSend関数を呼び出す PrtScSend(); } CDialog::OnTimer(nIDEvent); } void CEkssDlg::OnSend() { //クライアントの場合 : m_iCS == 0 if( m_iCS == 0 ){ //SetTimer関数を呼び出す SetTimer( 1 , 10000 , NULL ); } } void CEkssDlg::OnReceive() { //サーバーの場合 : m_iCS == 1 if( m_iCS == 1 ){ //PrtScReceive関数を呼び出す PrtScReceive(); } } void CEkssDlg::PrtScSend() { CString sPS = "abcdefghijklmnopqrstuvwxyz01234567890123456789012345678901234567890123456789"; //Length=76 while( m_i <= 23 ){ sPS.Insert( sPS.GetLength() , "abcdefghijklmnopqrstuvwxyz01234567890123456789012345678901234567890123456789" ); m_i = m_i + 1; } int iPSLength = sPS.GetLength(); LPBYTE pbPS = ( LPBYTE ) malloc( iPSLength ); CopyMemory( pbPS, sPS , iPSLength ); int iSend = m_EsConnectSock.Send( pbPS , iPSLength ); if( iSend == SOCKET_ERROR ){ } else{ m_i = 0; } } void CEkssDlg::PrtScReceive() { int iPSLength = 1048576; char *pcPS = new char[iPSLength]; Sleep( 1000 ); int iReceive = m_EsConnectSock.Receive( pcPS , iPSLength ); if( iReceive == SOCKET_ERROR ){ } else{ pcPS[iReceive] = NULL; } MessageBox( pcPS ); } //////////////////////////////////////////////////////結果 クライアント → サーバー 送信 : 76 * 23 = 1,748 クライアント → サーバー ACK : 1,460 PSH , ACK : 440 サーバー → クライアント ACK 1460 + 440 = 1,900
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.