Здравствуйте! Начал разбираться с скоетами в андройде. Была написана программа-сервер на java и android клиент. С телефона сообщения доходят до сервера и отображаются корректно. Ответ от сервера - "android.v", хотя я отправляю то же самое сообщение что пришло от клиента.
Прошу помочь разобраться.
код клиента:
package com.example.norfel.threads2;
import android.content.Intent;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import java.net.*;
import java.io.*;
public class MainActivity extends AppCompatActivity {
TextView tvOut;
Button btnOk;
Button btnCancel;
int mCounter=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tvOut = (TextView) findViewById(R.id.tvOut);
btnOk = (Button) findViewById(R.id.btnOk);
btnCancel = (Button) findViewById(R.id.btnCancel);
View.OnClickListener oclBtnOk = new View.OnClickListener() {
@Override
public void onClick(View vv) {
Runnable runnable = new Runnable() {
public void run() {
String address = "192.168.0.76";
int serverPort=15000;
try {
InetAddress ipAddress = InetAddress.getByName(address); // создаем объект который отображает вышеописанный IP-адрес.
Socket socket = new Socket(ipAddress, serverPort);
// Берем входной и выходной потоки сокета, теперь можем получать и отсылать данные клиентом.
InputStream sin = socket.getInputStream();
OutputStream sout = socket.getOutputStream();
// Конвертируем потоки в другой тип, чтоб легче обрабатывать текстовые сообщения.
DataInputStream in = new DataInputStream(sin);
DataOutputStream out = new DataOutputStream(sout);
// Создаем поток для чтения с клавиатуры.
BufferedReader keyboard = new BufferedReader(new InputStreamReader(System.in));
String line =null;
line="asd";
boolean b=true;
while (b) {
out.writeUTF(line); // отсылаем введенную строку текста серверу.
out.flush(); // заставляем поток закончить передачу данных.
// line = in.readUTF(); // ждем пока сервер отошлет строку текста.
in = new DataInputStream(socket.getInputStream());
tvOut.setText(in.toString());
b=false;
}
}
catch (Exception x){
x.printStackTrace();
tvOut.setText(x.toString());
}
Log.i("Thread","");
handler.sendEmptyMessage(0);
}
};
Thread thread = new Thread(runnable);
thread.start();
}
};
// присвоим обработчик кнопке OK (btnOk)
btnOk.setOnClickListener(oclBtnOk);
}
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
}
};
}
код сервера:
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package javaapplication1;
import java.net.*;
import java.io.*;
public class JavaApplication1 {
public static void main(String[] ar) {
int port = 15000; // случайный порт (может быть любое число от 1025 до 65535)
try {
ServerSocket ss = new ServerSocket(port); // создаем сокет сервера и привязываем его к вышеуказанному порту
System.out.println("Waiting for a client...");
Socket socket = ss.accept(); // заставляем сервер ждать подключений и выводим сообщение когда кто-то связался с сервером
System.out.println("Got a client :) ... Finally, someone saw me through all the cover!");
System.out.println();
// Берем входной и выходной потоки сокета, теперь можем получать и отсылать данные клиенту.
InputStream sin = socket.getInputStream();
OutputStream sout = socket.getOutputStream();
// Конвертируем потоки в другой тип, чтоб легче обрабатывать текстовые сообщения.
DataInputStream in = new DataInputStream(sin);
DataOutputStream out = new DataOutputStream(sout);
String line = null;
line = in.readUTF(); // ожидаем пока клиент пришлет строку текста.
System.out.println("The dumb client just sent me this line : " + line);
System.out.println("I'm sending it back...");
out.writeUTF(line); // отсылаем клиенту обратно ту самую строку текста.
out.flush(); // заставляем поток закончить передачу данных.
System.out.println("Waiting for the next line...");
System.out.println();
} catch(Exception x) { x.printStackTrace(); }
}
}