Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets 我正在使用BSD套接字,但recv无法获取任何数据,似乎一直在等待_Sockets_Cocos2d X_Recv_Bsd - Fatal编程技术网

Sockets 我正在使用BSD套接字,但recv无法获取任何数据,似乎一直在等待

Sockets 我正在使用BSD套接字,但recv无法获取任何数据,似乎一直在等待,sockets,cocos2d-x,recv,bsd,Sockets,Cocos2d X,Recv,Bsd,我的客户代码: void* Gameserver::listenSocketData(void* obj){ char buffer[5]; std::string contents; int ret = 0; bool rs = true; int count=0; while(rs) { contents = ""; send(m_socketHandle, "send from ios", 20, 0); CCLog("send:%d",count++);

我的客户代码:

  void*  Gameserver::listenSocketData(void* obj){
char buffer[5];
std::string contents;
int ret = 0;
bool rs = true;
int count=0;
while(rs)
{
    contents = "";
    send(m_socketHandle, "send from ios", 20, 0);
    CCLog("send:%d",count++);
    ret = recv(m_socketHandle,buffer,4,0);
    CCLog("what ret:%d",ret);
    // 服务器关闭
    if(ret == 0)
    {
        CCLog("Error: server close");
        rs = false;
    }
    if(ret == 4)
    {

        char buf[2000];
        int start ;
        int end  ;
        while((ret = recv(m_socketHandle,buf,10,0))>0)
        {
            contents.append(buf,ret);
                break;
        }
        CCLog("stard:%d,end:%d",start,end);
        CCLog("recv content:%s\n",contents.c_str());
        CCString* str = CCString::create(contents.substr(start,end-start));
        CCNotificationCenter::sharedNotificationCenter()->postNotification("receivedata", str);
    }else {
        CCLog("Error: recv data Error %d",ret);
    }
}
return NULL;
}

我使用java套接字作为服务器:

public void beginListen(){
    while(true){
        try{
            final Socket socket = sever.accept();

            new Thread(new Runnable(){
                public void run(){
                    BufferedReader in;
                    try{
                        in = new BufferedReader(new InputStreamReader(socket.getInputStream(),"UTF-8"));
                        PrintWriter out = new PrintWriter(socket.getOutputStream());
                        while (!socket.isClosed()){
                            String str;
                            str = in.readLine();
                            out.println("Hello!world!! " + str);
                            out.flush();
                            if (str == null || str.equals("end"))
                                break;
                            System.out.println(str);
                        }
                        socket.close();
                    }catch(IOException e){
                        e.printStackTrace();
                    }
                }
            }).start();
        }catch(IOException e){
            e.printStackTrace();
        }
    }
}

奇怪的是,如果我只使用发送功能,服务器可以接收消息,所以我认为服务器是正常的。但如果在客户端中同时使用send和recv,则只有在退出客户端时,服务器才能打印收到的消息。我还在recv上使用断点,但客户端无法执行任何其他命令,因为它正在等待。

Parhaps readLine正在等待CR LF行终止符,而您的BSD客户端将只提供LF'\n'行终止符,因此服务器上的读线将阻塞,直到客户端终止连接。我不能肯定,所以也许你会想检查一下这种可能性。请尝试与您的客户端一起发送\r\n。Paulch先生,我尝试了您的建议,但仍然无法正常工作,谢谢您,但是我认为您的服务器没有通过in.readLine指令的假设是否正确?