当前位置: 代码迷 >> Android >> Windows的C++服务器和Android客户端用Socket通讯,为什么会报IOException
  详细解决方案

Windows的C++服务器和Android客户端用Socket通讯,为什么会报IOException

热度:107   发布时间:2016-04-28 02:15:31.0
Windows的C++服务器和Android客户端用Socket通信,为什么会报IOException?
Android中的接收线程是这样的:
	class GetThread implements Runnable
{
@Override
public void run() 
{
try 
{
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
while(true)
{
String input = in.readLine();
if(input!=null)
{
Message msg = new Message();
msg.obj = input;
handler.sendMessage(msg);
}

}
catch (IOException e) 
{
System.out.println("NetThreadIOException");
Message msg = new Message();
msg.obj = "net error";
handler.sendMessage(msg);
}


Windows上的服务器我用了一份开源的库,主程序是这样的:
#include "Socket.h"
#include<iostream>
using namespace std;

const int PORT = 12121;
const int MAX_CONNECT = 100;

int main()
{
    cout<<"Working..."<<endl;
SocketServer socket(PORT, MAX_CONNECT);
cout<<"Waiting for Client"<<endl;
socket.Accept();
socket.SendLine("Hello!");
cout<<"Hello!"<<endl;
system("pause");
return 0;
}


其中SendLine函数是这么写的:
void Socket::SendLine(std::string s) {
  s += '/n';
  send(s_,s.c_str(),s.length(),0);
}


现在现象是:打开服务器后,运行客户端,客户端能够正确连接至服务器,但是服务器发给他“Hello”时,客户端接收不到,并报IOException。

这份代码之前我曾在多个地方用过,只不过当时的服务器不同,一个是用Java写的,一个是用Linux的C++写的……

想知道出错的可能原因? 谢谢~~
------解决思路----------------------
client_socket_manager.login();这句开的线程在login,马上就执行下一句 client_socket_manager.openGetThread();
如果login的线程挂起或未login成功,那socket肯定是null,后面读信息,怎么读呢?
应该是确保login成功后,再oopenGetThread()。
  相关解决方案