Я пытаюсь отправить данные с моего телефона Android на домашний сервер с помощью сокетов. Мой сервер запускает Linux, поэтому я использовал Perl для кодирования сценария для моего сервера. Соединение работает нормально, и я могу отправить данные моему клиенту, работающему по телефону.соединение между сервером, выполняющим perl skript и android
Проблема в том, что когда я посылаю что-то (первая попытка была простой строкой) на сервер, я ничего не получаю на стороне серверов. Все работает нормально, если я использую 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();
}
на моем телефоне я получаю это, если я выполнить приведенный выше код:
соединение с сервером успеха!
и на стороне сервера, я использую этот код, чтобы получить строку из сокета клиентов:
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);
}
Как создать сокет на стороне сервера? Можете ли вы показать нам соответствующий код? Кроме того, я думаю, что 'While' должен быть строчным. – amon
ok Я обновил почти весь код для сервера. а в верхнем регистре, потому что я ввел образец вручную (sry). если есть такая другая ошибка, то просто игнорируйте ее, если она не является логической. – cyberboy
Ну, это работает для меня: скрипт Perl получает и распечатывает запросы. Тем не менее, дочерние процессы переходят в бесконечный цикл, когда сокет не имеет дополнительных данных. Каково ваше обоснование цикла while (1) в ребенке? – amon