服务器运行perl skript和android之间的连接

时间:2013-06-15 13:38:23

标签: android perl sockets

我正在尝试使用套接字将数据从我的Android手机发送到我的家庭服务器。我的服务器运行Linux,因此我使用Perl为我的服务器编写脚本代码。连接正常,我可以将数据发送到手机上运行的客户端。

问题是,当我向服务器发送一些东西(第一次尝试是一个简单的字符串)时,我在服务器端没有收到任何东西。如果我使用telnet将字符串发送到服务器,一切正常。

我现在坐在这里已经有一段时间了,我看着是否有一个类似的问题,我找不到任何针对Android讨论Perl脚本的问题。这是我的Android应用程序代码:

  try {
    Socket socket = new Socket("192.168.178.22", 22222);
    Statusinformation("connection with server succeed");
    BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    Statusinformation(input.readLine());

    OutputStream outstream =socket.getOutputStream();
    PrintWriter out = new PrintWriter(outstream);
    out.println("This is a test message from client on phone!\n");
    socket.close();

  } catch (IOException e) {
    // TODO Auto-generated catch block
    Statusinformation("connection unsucsessfull");
    e.printStackTrace();
  }
如果我执行上面的代码,我手机上的

与服务器的连接成功! enter image description here

在服务器端我使用此代码从套接字客户端接收字符串:

use IO::Socket;

my $server = IO::Socket::INET -> new(
  Proto     => 'tcp',
  LocalPort => 22222,
  Listen    => SOMAXCONN,
);

print "Server started..\n";

while (1) {
  next unless my $conect = $server -> accept();
  my $childconection = fork;
  if ($childconection == 0) {
    handle_connection($conect);
  }
}

sub handle_connection
{
  my $sock = shift;
  my $client_message="";
  my $client_addr = $sock -> peerhost;

  print "connection: $client_addr connected\n";
  print $sock "hi $client_addr, you are connected!\n";

  while (1) {
    open (Tempfile, '>>tempfile.txt');

    while ($client_message = <$sock>) {
      print Tempfile $client_message;
      print $client_message;
    }

    close (Tempfile);
  }
  close($sock);
  exit(0);
}

1 个答案:

答案 0 :(得分:0)

好吧,现在我有点惭愧。 我通过添加以下内容解决了问题 了out.flush(); flush()方法确保将所有挂起的数据发送到目标并刷新目标。