我有一个用qt c++编写的基本tcpserver。
我有一个带有tcpsocket客户端(java)的基本android应用程序。
我的服务器运行在一个树莓皮4。
android应用程序在我的手机上运行。
似乎,我无法连接客户端和服务器。
W/System.err: java.net.NoRouteToHostException: Host unreachable
W/System.err: at libcore.io.IoBridge.connect(IoBridge.java:132)
at java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:137)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:390)
W/System.err: at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:230)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:212)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:436)
at java.net.Socket.connect(Socket.java:621)
at java.net.Socket.connect(Socket.java:570)
at java.net.Socket.<init>(Socket.java:450)
W/System.err: at java.net.Socket.<init>(Socket.java:218)
at Connection.doInBackground(Connection.java:19)
at Connection.doInBackground(Connection.java:11)
我尝试了几个端口(50000、55000、6969),但没有任何变化。
在我的服务器上,如果我运行“telnet”,就建立了连接。但是在devandroid env上,如果我运行相同的命令,就无法建立连接。
我试图配置我的路由器(通过端口Map),但没有任何变化。
有人对我的问题有想法吗?谢谢
android java应用程序代码:
@Override
protected Integer doInBackground(Integer... strings) {
try {
Socket socket = new Socket(ip, 6969);
BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
System.out.println("First create 1.1");
return 0;
} catch (IOException e) {
e.printStackTrace();
//Toast.makeText(getApplicationContext(), "Connection not done", Toast.LENGTH_SHORT).show();
System.out.println("First create 1.2 : " + e.getStackTrace());
return -1;
}
服务器:
Server::Server(int32_t port, QObject *parent) : QObject(parent)
{
server = new QTcpServer(parent);
// whenever a user connects, it will emit signal
connect(server, SIGNAL(newConnection()), this, SLOT(newConnection()));
quint16 portQt = static_cast<quint16>(port);
if(!server->listen(QHostAddress::Any, portQt)) {
qDebug() << "Server could not start";
throw;
}
else {
qDebug() << "Server started on port " << port << " " << portQt;
}
}
Server::~Server() {
}
void Server::newConnection()
{
// need to grab the socket
QTcpSocket *socket = server->nextPendingConnection();
qDebug() << "YES";
socket->write("Hello client\r\n");
socket->flush();
socket->waitForBytesWritten(3000);
socket->close();
}
1条答案
按热度按时间eulz3vhy1#
您必须知道您的服务器正在侦听哪个端口号,并且只需要尝试连接到该端口
很可能你的树莓有telnet服务器
telnetd
已经在运行,这就是为什么你可以连接要进行测试,您应该通过wifi连接手机和同一局域网上的服务器。我提醒您,在路由器上打开广域网的端口会带来安全风险