【问题标题】:Android socket establishes connection but does not send or receiveAndroid socket建立连接但不发送或接收
【发布时间】:2012-08-05 23:01:16
【问题描述】:

我一直试图在我的服务器和手机之间建立一个基本的套接字连接。以下代码在 Android 模拟器上完美运行,但是当我在手机上尝试时,它失败了,我不知道为什么。我已经尝试了大多数可以在 SO 和 Google 上找到的建议,但都没有奏效。

我的服务器代码只是一些基本的 Ruby: 需要'socket'

server = TCPServer.new 2000

puts 'Server started!'
loop do
Thread.start(server.accept) do |client|
puts "Received client"

client.write "Connection established."

    while text = client.gets
        puts text
        client.puts text # Just echo the result back...
    end

    client.close
  end
end

我的客户端代码如下: 公共无效 onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);

    try{
        Socket s = new Socket("***", 2000);

        BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));

        PrintWriter out = new PrintWriter(s.getOutputStream());

        out.println("test\r\n"); 
        out.flush();
        out.close();            


    }catch(Exception e){

    }

}

代码在模拟器上返回预期的响应:

Server started!
Received client
test

但是当我在手机上运行它时,它只会返回:

Server started!
Received client

显然它正在建立连接。我写了一些更深入的代码,也写回服务器,模拟器再次写入和接收,但我的手机两者都没有,过了一会儿,我的手机报告:“连接被对等方关闭。”

任何想法都会很棒!

编辑:它似乎可以在我朋友的手机上运行...所以现在我更难过了...我使用的是 Sony Xperia

【问题讨论】:

    标签: android sockets


    【解决方案1】:

    您永远不会从输入流中读取任何输入,所以它只是在等待。也许您想要做的是在缓冲阅读器上调用 readLine()。并且可能将您的输出流代码放在输入流代码之前。

    【讨论】:

      【解决方案2】:

      原来运营商 MTN 上的端口 2000 存在问题。使用另一个端口解决了我的问题。

      【讨论】:

        猜你喜欢
        • 2022-10-23
        • 1970-01-01
        • 1970-01-01
        • 2019-08-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-13
        相关资源
        最近更新 更多