Конект есть, сообщений нет.

Ответить
Konstantin18ko
Сообщения: 22
Зарегистрирован: 14 авг 2015, 11:46

Конект есть, сообщений нет.

Сообщение Konstantin18ko » 20 сен 2015, 17:04

Есть клиент, есть сервер.
Клиент:
[syntax=java]package com.example.free.client2;

import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;


public class MainActivity extends ActionBarActivity {

TextView textView1;
TextView textView2;
TextView textView3;
TextView textView4;

EditText editText;

Button buttonConnect;
Button buttonSend;

private static final String TAG = "myLog";

private Socket socket;

private static final int SERVERPORT = 6666;
private static final String SERVER_IP = "192.168.1.40" +
"";

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

textView1 = (TextView) findViewById(R.id.textView1);
textView2 = (TextView) findViewById(R.id.textView2);
textView3 = (TextView) findViewById(R.id.textView3);
textView4 = (TextView) findViewById(R.id.textView4);

editText = (EditText) findViewById(R.id.editText);

buttonConnect = (Button) findViewById(R.id.buttonConnect);
buttonSend = (Button) findViewById(R.id.buttonSend);

Log.d(TAG, "Найти компоненты");

new Thread(new ClientThread()).start();
}

public class ClientThread implements Runnable {

@Override
public void run() {
Log.d(TAG, "Подключение потока Run");
try {InetAddress serverAddr = InetAddress.getByName(SERVER_IP);
textView1.setText("Подключение по IP произошло");
Log.d(TAG, "Подключение по IP произошло");
socket = new Socket(serverAddr, SERVERPORT);
textView2.setText("Подключение по Port произошло");
Log.d(TAG, "Подключение по Port произошло");
} catch (UnknownHostException e1) {
e1.printStackTrace();
Log.d(TAG, "Отказ 1/Поток Run");
} catch (IOException e1) {
e1.printStackTrace();
Log.d(TAG, "Отказ 1/Поток Run");
}


}

}

public void buttonSend (View v){
Log.d(TAG, "Кнопка Send");
try {
String line = editText.getText().toString();
PrintWriter out = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream())),
true);
out.println(line);
Log.d(TAG, "Отправить на сервер");
} catch (UnknownHostException e) {
e.printStackTrace();
Log.d(TAG, "Отказ 1/Кнопка Send");
} catch (IOException e) {
e.printStackTrace();
Log.d(TAG, "Отказ 2/Кнопка Send");
} catch (Exception e) {
e.printStackTrace();
Log.d(TAG, "Отказ 3/Кнопка Send");
}
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();

//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}

return super.onOptionsItemSelected(item);
}
}[/syntax]

Сервер:
[syntax=java5]/*
* 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 server;
import java.net.*;
import java.io.*;
/**
*
* @author Free
*/
public class Server {

public static void main(String[] ar) {
int port = 6666; // случайный порт (может быть любое число от 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;
while(true) {
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(); }
}

}
[/syntax]

Конект между клиентом и сервером есть, а сообщения клиент серверу не передает(точнее передает, но сервер не воспроизводит).
P.S. И как реализовать ответное сообщение от сервера?

LogCat
09-20 18:07:26.270 28751-28751/com.example.free.client2 D/myLog﹕ Найти компоненты
09-20 18:07:26.274 28751-28769/com.example.free.client2 D/myLog﹕ Подключение потока Run
09-20 18:07:26.275 28751-28769/com.example.free.client2 D/myLog﹕ Подключение по IP произошло
09-20 18:07:26.294 28751-28769/com.example.free.client2 D/myLog﹕ Подключение по Port произошло
09-20 18:07:35.186 28751-28751/com.example.free.client2 D/myLog﹕ Кнопка Send
09-20 18:07:35.187 28751-28751/com.example.free.client2 D/myLog﹕ Отправить на сервер

Ответить