Связь Java(клиент) Python(сервер)- Socket
Проблема вся в том, что сообщение до андройда (клиента) не доходят, или вообще не идут. Он на андройде пишет что соединился, я с андройда отправляю одно сообщение Python server его выводит, а потом второе ему отправляю, его не выводит, но андройд пишет что отправил, до этого он все принимал. Но на андройд вообще ничего не приходит и не проходило. Мне нужно отправить на сервер(именно Python server) обработать и вернуть. Как это реализовать?
import socket
import sys
HOST ='192.168.0.102' #'192.168.0.100'#'192.168.1.102'
PORT = 8280
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print ('socket created')
#Bind socket to Host and Port
try:
s.bind((HOST, PORT))
except socket.error as err:
print ('Bind Failed, Error Code: ' + str(err[0]) + ', Message: ' + err[1])
sys.exit()
print ('Socket Bind Success!')
#listen(): This method sets up and start TCP listener.
s.listen(10)
print ('Socket is now listening')
while 1:
conn, addr = s.accept()
print ('Connect with ' + addr[0] + ':' + str(addr[1]) ) #str(
datta = "Client sSet data"
Host1 = '' #'192.168.0.102'
Port1 = 2 # 8280
Host1 = addr[0]
Port1 = addr[1]
sor = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
sor.bind(('', 0)) # (('192.168.0.102', 8280)) # Задаем сокет как клиент
# server = (Host1 , Port1)
sor.sendto(datta.encode('utf-8'), ((Host1 , Port1)) ) #server)# Уведомляем сервер о подключении
print('Send data CLIENT')
conn.sendall(datta.encode())
print('2Send data CLIENT2')
buf = conn.recv(64)
print (buf)
s.close()
полужирный курсив
import android.annotation.SuppressLint;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
@SuppressLint("SetTextI18n")
public class MainActivity extends AppCompatActivity {
Thread Thread1 = null;
EditText etIP, etPort;
TextView tvMessages;
EditText etMessage;
Button btnSend;
String SERVER_IP;
int SERVER_PORT;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
etIP = findViewById(R.id.etIP);
etPort = findViewById(R.id.etPort);
//test
etIP.setText("192.168.0.102");
etPort.setText("8280");
tvMessages = findViewById(R.id.tvMessages);
etMessage = findViewById(R.id.etMessage);
btnSend = findViewById(R.id.btnSend);
Button btnConnect = findViewById(R.id.btnConnect);
btnConnect.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tvMessages.setText("");
SERVER_IP = etIP.getText().toString().trim();
SERVER_PORT = Integer.parseInt(etPort.getText().toString().trim());
Thread1 = new Thread(new Thread1());
Thread1.start();
}
});
btnSend.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String message = etMessage.getText().toString().trim();
if (!message.isEmpty()) {
new Thread(new Thread3(message)).start();
}
}
});
}
private PrintWriter output;
private BufferedReader input;
class Thread1 implements Runnable {
@Override
public void run() {
Socket socket;
try {
socket = new Socket(SERVER_IP, SERVER_PORT);
output = new PrintWriter(socket.getOutputStream());
input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
runOnUiThread(new Runnable() {
@Override
public void run() {
tvMessages.setText("Connected\n");
}
});
new Thread(new Thread2()).start();
} catch (IOException e) {
e.printStackTrace();
}
}
}
class Thread2 implements Runnable {
@Override
public void run() {
while (true) {
try {
final String message = input.readLine();
if (message != null) {
runOnUiThread(new Runnable() {
@Override
public void run() {
tvMessages.append("server: " + message + "\n");
}
});
} else {
Thread1 = new Thread(new Thread1());
Thread1.start();
return;
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
class Thread3 implements Runnable {
private String message;
Thread3(String message) {
this.message = message;
}
@Override
public void run() {
output.write(message);
output.flush();
runOnUiThread(new Runnable() {
@Override
public void run() {
tvMessages.append("client: " + message + "\n");
etMessage.setText("");
}
});
}
}
}
Manifest Manifest
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
полужирный курсив