Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Succesiune notar versus instanta ...

Montaj aer conditionat in balcon ...

joc idem Half Life gratis

PC game stream catre Nvidia Shiel...
 Pompa de apa HEPU ?!

Vreau o masina electrica de tocat...

Cum ajunge remorca de tir inapoi ...

Alt "Utilizator nou" pe T...
 ULBS INFORMATICA

Index preturi

Boxa membrana tweeter infundata

Am nevoie de poze cu un curcubeu
 Whisky for Mac

Xiaomi 14 Gpay

Izolare zid exterior de scandura

Dezinstalare drivere W11 23H3
 

Pot transmite dar nu receptiona date de la un Python-server cu Android

- - - - -
  • Please log in to reply
3 replies to this topic

#1
ursudepadure

ursudepadure

    Junior Member

  • Grup: Members
  • Posts: 232
  • Înscris: 28.04.2012
Vreau sa controlez un Raspberry pi prin telefon/tableta Android. Am reusit sa fac transmisia de date, pot sa aprind leduri, etc. cu click pe butoane sau alte evenimente din Android dar nu reusesc sa transmit date de la serverul scris in Python pentru Android. Ca sa vad daca am inteles, am scris cat se poate de minimal un server si un client in Python si funcitoneaza ca un program de chat:
AICI E SERVERUL:
import socket		
s = socket.socket()	  
#host = socket.gethostname()
host =''
port = 7800			
s.bind((host, port))  
s.listen(5)
print 'acesta e numele hostului:'  , socket.gethostname()
print 'urmeaza datele referitoare la socket doar pentru testare: '
print(s.getsockname()[0])
print(s.getsockname()[1])
print 'Asteptam clienti! Ia conexiune de aici neamule!'
c, addr = s.accept()
print '--------------------Avem clienti! --------------------------------'
print 'Avem O conexiune cu client de la adresa si portul:', addr
while True:
	print 'Clientul zice ca:'
	buf = c.recv(1024)
	print 'am trimis textul ', buf
	q = raw_input("Scrie catre client : >>>  ")
	c.send(q)
	print '-----------------mesaj transmis la client!------------------'
AICI E CLIENTUL:
import socket
import sys
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('192.168.1.92', 7800 )) #IP is the server IP
#trimit un prim mesaj scris direct dupa linia de comanda dupa ce am tastat python client.py mesjaj de salut
for args in sys.argv:
	if args == "":
		args = 'no args'
	else:
		s.send(args + ' ')
print 'Incepe dialogul:'
while True:
   print ' Serverul zice: '
   data = s.recv(1024)
   print data
   q = raw_input(" Scrie ceva la server: >>> ")
   s.send(q)
   print '-----------------mesaj transmis la server------------------'
////////////////////////////////////
Acum pentru a trimite date catre un sever Python din Rasbery de pe o tableta Android am scris un program modularizat, cu o clasa separata de MainActivity. Pentru a simplifica lucrurile, prezint aici incercarea de a receptiona mesajele de la serverul Python in MainActivity ca sa nu complic lucurile. De conectat se conecteaza dar nu apare nimic intr-un TextView (un fel de "label" in alte limbaje) care in codul meu se numeste "mesaj" si corespunde unui TextView cu ID textView in layout.
////////////////// ACESTA E CODUL SCRIS PENTRU ANDROID ///////////////////////////////
public class MainActivity extends Activity {
	private Socket socket;
	private static final int SERVERPORT = 7800;
	private static final String SERVER_IP = "192.168.1.92";
	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		new Thread(new ClientThread()).start();
	}
	class ClientThread implements Runnable
	{
		@Override
		public void run() {
			try {
				InetAddress serverAddr = InetAddress.getByName(SERVER_IP);
				socket = new Socket(serverAddr, SERVERPORT);
			} catch (UnknownHostException e1) {
				e1.printStackTrace();
			} catch (IOException e1) {
				e1.printStackTrace();
			}
			try {											   // SE CONECTEAZA DAR URMEAZA SA CITEASCA DE LA SERVER
				InputStream in = socket.getInputStream();								 // CREEAZA UN STREAM CARE CITESTE DIN SOCKET
				TextView message = (TextView) findViewById(R.id.textView);   // ASOCIAZA VARIABILA message CU textView DIN LAYOUT
				BufferedReader br = new BufferedReader(new InputStreamReader(in));  // CREEAZA UN BUFFER PENTRU A PUTEA CITI
				String line;
				while ((line = br.readLine ()) != null) {										 // CITESTE LINIILE ATATA TIMP CAT EXISTA LINII
					message.setText(br.readLine());										   // AFISEAZA TEXTUL IN textView, PUTEAM FOLOSI append
				}
			   in.close();
			} catch (UnknownHostException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
}
//////////////////////////
Ca sa vad daca merge am modificat serverul si am dezactivat liniile cu mesaje primite de la client, sa transmit doar date imediat dupa conectare:
MODIFICAREA FACUTA IN SEVERUL PYTHON:
while True:
	#print 'Clientul zice ca:'												  AM DEZACTIVAT CE VINE DE LA CLIENT, CA MA INTERSEAZA
	#buf = c.recv(1024)														SA MA FOCUSEZ ASUPRA PROBLEMEI DE RECEPTIONARE
	#print 'am trimis textul ', buf
	q = raw_input("Scrie catre client : >>>  ")
	c.send(q)
	print '-----------------mesaj transmis la client!------------------'

Ei bine, ma asteptam sa vad ceva in casuta de text de tip TextView. Nu se intampla insa nimic desi serverul imi arata ca se conecteaza.

Edited by MarianG, 01 December 2020 - 12:26.


#2
ursudepadure

ursudepadure

    Junior Member

  • Grup: Members
  • Posts: 232
  • Înscris: 28.04.2012
Oare am postat gresit aici? Dar nu stiu exact unde as putea posta asta? E vorba si de Python (limbaj de script) si de Java pentru SDK Android pentru care nu exista un forum.

#3
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,233
  • Înscris: 24.02.2007
Aria asta e pentru cerut/promovat programe.

Mai jos gasesti o arie imensa pt probleme de programare

#4
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,233
  • Înscris: 24.02.2007
Wireshark iti arata ce se transfera pe retea, pentru a te ajuta sa diagnostichezi problema.

Anunturi

Chirurgia endoscopică a hipofizei Chirurgia endoscopică a hipofizei

"Standardul de aur" în chirurgia hipofizară îl reprezintă endoscopia transnazală transsfenoidală.

Echipa NeuroHope este antrenată în unul din cele mai mari centre de chirurgie a hipofizei din Europa, Spitalul Foch din Paris, centrul în care a fost introdus pentru prima dată endoscopul în chirurgia transnazală a hipofizei, de către neurochirurgul francez Guiot. Pe lângă tumorile cu origine hipofizară, prin tehnicile endoscopice transnazale pot fi abordate numeroase alte patologii neurochirurgicale.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate