自己写的SOCKET文件传输客户端和服务端 客户端开两次服务端才有反应解决办法

自己写的SOCKET文件传输客户端和服务端 客户端开两次服务端才有反应
自己写的服务端和客户端 用途是获得远程服务器上指定PATH的文件
除了2个初始化WSA和清空WSA的东西之外没有依赖其他文件
打开服务端之后 必须打开2次客户端 服务端才有反应 但是服务端获得的文件PATH有问题
(找寻文件rest123.txt烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫......蘾)
自己检查客户端之后发现顺序没有问题 哪位可以帮忙排一下错

SERVER:
C/C++ code
#include <iostream>
#include <WinSock2.h>
#include "sock_op.h"
using namespace std;


#define SOCK_BUFFER_LENGTH 4096
#define BUFFER_LENGTH 50

char* FindIp (char* IpAddr);



int main () 
{
    int Ret;
    InitSockLib();
    //创建套接字
    SOCKET m_sock = socket (AF_INET , SOCK_STREAM , IPPROTO_TCP);
    if (m_sock == INVALID_SOCKET)
    {
        cout <<"Failed socket () " << endl;
        return 0;
    }

    //填充地址结构
    sockaddr_in sin;
    sin.sin_family = AF_INET;
    sin.sin_port = htons (4567);
    sin.sin_addr.S_un.S_addr = INADDR_ANY;
    
    //绑定套接字

    if (bind (m_sock,(LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR)
    {
        cout << "Faild bind() "<<endl;
            return 0;
    }
    cout<<"bind OK"<<endl;

    //开始监听
    if(listen(m_sock,5) == SOCKET_ERROR)
    {
        cout<<"Failed listen()"<<endl;
        return 0;
    }
    cout<<"Listening start"<<endl;

    //循环接受连接请求
    sockaddr_in remoteAddr;
    int nAddrLen = sizeof(remoteAddr);
    SOCKET m_client;
    char reBuffer[SOCK_BUFFER_LENGTH];
    char* temp;
    while (1)
    {

    cout<<"进入循环"<<endl;
        //接受新连接
        m_client = accept(m_sock,(SOCKADDR*)&remoteAddr,&nAddrLen);
        if ((m_client = accept(m_sock,(SOCKADDR*)&remoteAddr,&nAddrLen)) == INVALID_SOCKET)
        {
            cout<<"Failed accept()"<<endl;
            continue;
        }
        cout<<"接受到一个新的连接: "<<inet_ntoa(remoteAddr.sin_addr)<<"\r\n"<<endl;
        //接受请求
        recv(m_client,reBuffer,strlen(reBuffer),0);
        temp = reBuffer+strlen(reBuffer);
        *temp = '\0';
        cout<<"找寻文件"<<reBuffer<<endl;
        //搜索文件
        char fileBuffer[SOCK_BUFFER_LENGTH];
        char buffer[BUFFER_LENGTH]="";
        char fileError[ BUFFER_LENGTH]="文件不存在";
        FILE *fp;
        int k=0,l=0;

        if ((fp=fopen(reBuffer,"rb"))==NULL)
        {
        strcpy (buffer,fileError);
        cout<<buffer<<endl;
        }
        while (!feof(fp))
        {
        k=fread(fileBuffer,1,SOCK_BUFFER_LENGTH,fp);
        send(m_client,fileBuffer,k,0);
        l+=k;
        }
        cout<<"文件已发送"<<l<<"比特"<<endl;
        
        //关闭文件句柄
        fclose(fp);

    }    
        //关闭客户端连接
        closesocket (m_client);

    
    //关闭主循环套接字
    closesocket(m_sock);

    DestroySockLib();

    return 0;
}


Client:
C/C++ code
#include <iostream>
#include <WinSock2.h>
#include "sock_op.h"
using namespace std;


#define SOCK_BUFFER_LENGTH 4096
#define BUFFER_LENGTH 50



int main (int argc,char* argv[]) 
{
    int Ret;
    if (argc < 3)
    {
        cout<<"Usage: "<<argv[0]<<" ServerIP  Path"<<endl;
        return 1;
    }
    char b1[BUFFER_LENGTH]="\0";
    InitSockLib();
    //创建套接字
    SOCKET m_sock = socket (AF_INET , SOCK_STREAM , IPPROTO_TCP);
    if (m_sock == INVALID_SOCKET)
    {
        cout <<"Failed socket () \n" << endl;
        return 0;
    }

    //填充地址结构
    sockaddr_in sin;
    sin.sin_family = AF_INET;
    sin.sin_port = htons(4567);
    sin.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
    
    //绑定套接字

//    if (bind (m_sock,(LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR)
//    {
//        cout << "Faild bind() \n"<<endl;
//            return 0;
//    }


    //发送连接请求
    char fileBuffer[SOCK_BUFFER_LENGTH];
    FILE *fp;


    //接受新连接
    if (connect(m_sock,(SOCKADDR*)&sin,sizeof(sin))== INVALID_SOCKET)
    {
    cout<<"Failed connect()"<<endl;
    return 0;
    }
    send(m_sock,argv[2],strlen(argv[2]),0);
    //接受请求
    while (1) 
    {
    recv(m_sock,fileBuffer,strlen(fileBuffer),0);

    if ((fp=fopen("down.txt","wb"))==NULL)
    fwrite(fileBuffer,1,SOCK_BUFFER_LENGTH,fp);
    }
    //关闭文件句柄
    fclose(fp);


    //关闭套接字
    closesocket(m_sock);

    DestroySockLib();

    return 0;
}