0

当我尝试从 PC 连接到 android 设备时,我发现了一个套接字异常“无法连接,因为目标机器主动拒绝了它”。android设备上的服务器代码:

private void networkOperations()
{
    Thread networkThread = new Thread (null, doBackgroundThreadProcessing, "Network");
    networkThread.start();
}

private Runnable doBackgroundThreadProcessing = new Runnable() 
{
    public void run() {
        backgroundThreadProcessing();
    }
};

private void backgroundThreadProcessing()
{
    Socket s = null;
    ServerSocket ss = null;
    try {
        ss = new ServerSocket(8867);
    } catch (IOException e) {
        e.printStackTrace();
    }
    while(!Thread.currentThread().isInterrupted())
    {
        try {
            if (s == null)
                s = ss.accept();
            BufferedReader input = new BufferedReader(new InputStreamReader(s.getInputStream()));
            String st = null;
            st = input.readLine();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

networkOperations() 正在调用 Main Activity 的 onCreate() 方法。PC(C#)客户端的代码:

class Connection
{
    public Connection(String ip, String port)
    {
        Ip = IPAddress.Parse(ip);
        Port = Convert.ToInt32(port);
    }

    public IPAddress Ip
    {
        get;
        set;
    }

    public Int32 Port
    {
        get;
        set;
    }

    public Boolean ConnectionError;

    public Socket S;

    public void ConnectToServer()
    {
        IPEndPoint ipe = new IPEndPoint(Ip, Port);
        S = new Socket(ipe.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
        try
        {
            S.Connect(ipe);
        }
        catch (SocketException e)
        {
        }
    }

谁能帮我解决这个问题?谢谢。

4

1 回答 1

0

根据评论,您应该注意两件事。首先,您正在使用公共地址从本地网络联系本地网络中的设备。我不确定所有路由器都能够正确执行此操作,但是如果您想要公共访问,则需要转发 8867 端口。试试看,它可能会有所帮助。

在此处搜索您的路由器,您将找到如何执行此操作的说明:http: //portforward.com/

转接后从外网访问电话时,电话肯定是可用的。当然,您的手机应该始终具有相同的本地地址。在路由器设置中保留或在手机上手动设置。

出于测试目的,请尝试使用 PC 上的电话本地 IP 地址。

于 2013-06-11T22:53:47.957 回答