小弟是个新手,最近遇到了点小问题,用C语言实现socket同步短链接,客户端这边怎样实现呢?就是我作为客户端,发送一个请求,不断开socket链接,等待服务端应答,然后接收应答:我不是很清楚这个步骤,当我connect并发出请求后,需要使用listen使端口处于监听状态才能接收服务端的应答么?还是connect了,这个端口就既能发也能收了?有没有高手给说个步骤啊?比如先socket()创建套接字,然后connect()使用建立的套接字链接服务端,然后send发送请求,然后就可以直接read读取应答?还是在send后需要listen()使端口处于监听才能read?还有个问题,加入需要使用listen的话,需要知道是哪个端口号,可是connect的时候是不是随机找一个未用端口连接服务端,怎样知道connect后客户端使用的端口号呢?谢谢大哥大姐们!

解决方案 »

  1.   

    int CQueueHelp::ReadData(CString Host, int Port, int Queue, char* Chars,int& Count)
    {
    ////初始套接字参数。
    if (!this->InitSocket())
    {
    Count=0;
    return 0;
    } ////套创建接字 
    if (!this->CreateSocket(Host,Port,Queue))
    {
    Count=0;
    return 0;
    }  char revBuf[1024];   
    memset( revBuf, 0, sizeof(char)*1024 ); //包头的设置
    char Buff[8];  // 包头长度
    memset( Buff, 0, sizeof(Buff) );
    char Buff4[4];
    char Buff2[2]; this->IntToChar4(8,Buff4); //// 包头长度 8
    this->IntToChar2(Queue,Buff2);////队列号 Buff[0]=Buff4[0];
    Buff[1]=Buff4[1];
    Buff[2]=Buff4[2];
    Buff[3]=Buff4[3]; Buff[4]=12;    //// 请求数据 Buff[5]=Buff2[0];
    Buff[6]=Buff2[1]; Buff[7]=0;
    //连接服务器  
    if (!this->ConnectSocket())
    {
    Count=0;
    return 0;
    } ////向服务器发送数据 
    send(m_SOCKET,Buff,8,0); 
    //从服务器接收数据
    Count= recv(m_SOCKET,revBuf,1024,0);  
    if (Count>8)  //从数据中取内容
    {
    for (int i=0;i<Count;i++)
    {Chars[i]=revBuf[8+i];}
    } //关闭套接字 
    this->CloseSocket();
    return 11;
    }