Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> сервер отправил, клиент обработал и вернул. 
:(
    Опции темы
argamidon
Дата 5.8.2013, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 2.12.2011

Репутация: нет
Всего: нет



извините если создал тему не в той ветке.
создаю одну прогу, которая должна была бы брать определённый текст с сервера , делать с ним определённые действия и отправлять назад серверу.
клиент написан на android SDK jdk 1.6, а сервак на обычной настольной java se/1.7....Клиент также использует SocketChannel для того чтобы его можно прервать.

проблема вот в чём: пока сервер пытается читать ответ, на клиент ничего не может придти. Но если цикл, который читает входящие данные на стороне сервера закоментировать, то сообщение к клиенту доходит без проблем. клиент даже прочитать нормально не может.
мне очень важно использовать SocketChannel на стороне клиента. помогите понять в чём проблема.
пытался юзать shutdownInput/shutdownOutput но на андроиде такого метода нету(пока).

эти две программы укорочены насколько я смог чтобы определить неисправность.
их работа примерно по такой схеме должна происходить:
user posted image


server:
Код

package javaapplication4;
 
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.Reader;
import java.io.Writer;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.URL;
import java.nio.channels.SocketChannel;
import java.util.Scanner;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.Text;
import org.xml.sax.SAXException;
 
public class JavaApplication4 {
    public static void main(String[] args) throws IOException, ParserConfigurationException, SAXException, InterruptedException {
        ServerSocket server = new ServerSocket(8000);
        
        
        Socket socket = server.accept();
        
        
 
 
        OutputStream out = socket.getOutputStream();
        Writer ww = new OutputStreamWriter(out, "UTF-8");
        PrintWriter writer = new PrintWriter(ww, true);
        writer.println("hello");
        
        System.out.println(socket.getInetAddress());
 
        Scanner sc = new Scanner(socket.getInputStream());
        String res = "";
        while (sc.hasNextLine()) {
            res += sc.nextLine();
            System.out.println(res);
        }
        
        System.out.println(res);
        socket.close();
    }
}


клиент-андроид
Код

package com.example.app;
 
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.Writer;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.nio.channels.Channels;
import java.nio.channels.SocketChannel;
import java.util.Scanner;
 
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.app.PendingIntent;
import android.app.PendingIntent.CanceledException;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
 
public class MainActivity extends Activity implements View.OnClickListener {
    Button button, send;
    TextView text;
    static String PENDING_KEY = "pending_key";
    static int PENDING_CODE = 1001;
    PendingIntent pi;
    Thread th5;
    SocketChannel s;
    Socket socket;
    String res = "";
    private Handler handler = new Handler() {
        public void handleMessage(Message m) {
            if (m.what == 0) {
                String g = (String) m.obj;
                Toast.makeText(MainActivity.this, g, 0).show();
            } else if (m.what == 1) {
                Toast.makeText(MainActivity.this, "hello", 0).show();
            }
        }
    };
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button = (Button) this.findViewById(R.id.button1);
        text = (TextView) this.findViewById(R.id.textView1);
        button.setOnClickListener(this);
        send = (Button) this.findViewById(R.id.button2);
        send.setOnClickListener(this);
    }
 
    @Override
    public void onClick(View v) {
        if (v == button) {
            th5 = new Thread() {
                public void run() {
                    InetSocketAddress address = new InetSocketAddress(
                            "81.25.39.170", 8000);
 
                    try {
 
                        s = SocketChannel.open();
 
                        s.connect(address);
                        Scanner sc = new Scanner(s);
                        while (sc.hasNextLine()) {
                            res += sc.nextLine();
                        }
                        handler.sendMessage(handler.obtainMessage(0, res));
                        // PrintWriter writer = new PrintWriter(
                        // Channels.newOutputStream(s), true);
                        // writer.println(res);
                        // writer.flush();
 
                    } catch (IOException e) {
                        handler.sendMessage(handler.obtainMessage(0,
                                e.toString()));
                    } finally {
                    }
 
                }
            };
            th5.start();
 
        } else if (v == send) {
            OutputStream out = Channels.newOutputStream(s);
            PrintWriter writer = new PrintWriter(out, true);
            writer.write("hello");
        }
    }
 
}


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Работа с сетью | Следующая тема »


 




[ Время генерации скрипта: 0.0866 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.