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指令的假设是否正确?