我想实现2个欺骗之间的套接字连接,客户端继续向服务器发送GPS数据,我需要在新线程中运行它们,客户端发送第一个数据然后像这样保持显示错误
03-18 16:35:11.805:E / Client运行:(8163):java.net.ConnectException:无法连接到/192.168.2.103(端口5678):连接失败:ECONNREFUSED(拒绝连接)
这是客户端代码
public class Send implements Runnable{
private boolean Connect = true;
public void Connect(){
Connect = true;
}
public void Disconnect(){
Connect = false;
}
@Override
public void run() {
// TODO Auto-generated method stub
while(Connect){
try {
SocketClient = new Socket("192.168.2.103", 5678);
ObjectOutputStream oos = new ObjectOutputStream(SocketClient.getOutputStream());
oos.writeDouble(GPSinfo[2]);
//ObjectInputStream ois = new ObjectInputStream(SocketClient.getInputStream());
//ois.readInt();
oos.close();
//ois.close();
} catch (Exception e) {
Log.e("Client run: ", e.toString());
}
}
}
}
这是服务器代码
public class Receive implements Runnable{
private boolean CanReceive = true;
private double Data;
public void Connect(){
CanReceive = true;
}
public void Disconnect(){
CanReceive = false;
}
@Override
public void run() {
// TODO Auto-generated method stub
while(CanReceive){
try {
SocketServer = new ServerSocket(5678);
Socket connectedSocket = SocketServer.accept();
ObjectInputStream ois = new ObjectInputStream(connectedSocket.getInputStream());
Data = ois.readDouble();
DataText.setText("" + Data);
//ObjectOutputStream oos = new ObjectOutputStream(connectedSocket.getOutputStream());
//oos.writeInt(1);
//ois.close();
//oos.close();
} catch (Exception e) {
Log.e("Server run: ", e.toString());
}
}
}
}
顺便说一下,这两个代码都是内部类,并且添加了INTERNET权限。
答案 0 :(得分:3)
很明显,这不是路由器防火墙相关的问题,因为你在同一个网络下,所以只有几个可能性:
您应确保以某种方式打开该服务,这将有助于您调试罪魁祸首的位置。如果你已经这样做了,我建议使用一些调试工具来跟踪TCP数据包(我不知道你在目标机器上使用什么样的操作系统;如果它'一些Linux发行版,tcpdump
可能会有所帮助,在Win环境中WireShark
效果很好。
答案 1 :(得分:2)
这不是数据传输错误'。这是一个被拒绝的连接'错误。这意味着您想要在您指定的IP:端口上运行数据的服务器不会运行。
答案 2 :(得分:0)
尝试在开始连接之前终止adb服务。我遇到了类似的问题,并在连接解决问题之前终止了adb服务。
答案 3 :(得分:-1)
我有同样的错误。我只是使用ServerSocket而且运行良好。
ServerSocket socket = new ServerSocket(8888);