sockets - udp android server over wifi -
i have made program server android receiving udp packets c program client on wifi, problem can connect phone pc client through usb cable in order run application in phone . i'm newbie in android world, ask guide me on how set connection via wifi without using cable ?
help !
this server code :
package com.example.server_android; import java.io.ioexception; import java.net.datagrampacket; import java.net.datagramsocket; import java.net.socketexception; import java.net.unknownhostexception; import android.app.activity; import android.os.bundle; import android.util.log; import android.widget.edittext; import android.widget.textview; public class server_android extends activity{ private final static int server_port = 1234; public final static int receiving_timeout_server = 3000; datagramsocket socket; datagrampacket packetout; datagrampacket packetin; byte[] datain; byte[] dataout; /*android widgets*/ textview text; edittext edit; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_server_android); //text = (edittext)findviewbyid(r.id.edittext1); text =(textview)findviewbyid(r.id.textview2); text.settext(""); /* thread receiving data client */ new thread(new receiver()).start(); try { thread.sleep(500); }catch(interruptedexception e){ log.e("udp", "udp receive failed!"); } } public class receiver implements runnable{ public void run(){ try { while(socket != null && !socket.isclosed()){ dataout = new byte[1024]; // inetaddress fromaddress = inetaddress.getbyname("10.4.0.11"); socket = new datagramsocket(server_port); socket.setsotimeout(receiving_timeout_server); packetin = new datagrampacket(dataout,dataout.length); socket.receive(packetin); text.append("source port :" + packetin.getport() + "\n"); text.append("source address :" + packetin.getaddress().tostring() + "\n"); log.d("udp", "packet receveid"); string message = new string(packetin.getdata()); text.append(message +"\n"+ packetin.getport() +"\n"+ packetin.getaddress().tostring()); log.d("udp", "le message reçu"); log.d("message : ", "" + message); } } catch(unknownhostexception exc) { system.out.println("destinataire inconnu"); } catch(socketexception exc) { system.out.println("probleme d'ouverture de la socket"); } catch(ioexception exc) { system.out.println("probleme sur la reception du message"); } } } } and client code : //----------------------------------------------------------------------------
#include "biblio.h" #define portnumber 1234 int main(int argc, char **argv) { //_________seting_destination_ip_adress____________________ in_addr_t ipaddress= inet_addr("10.4.0.156"); //---- create udp socket ---- int udpsocket=socket(pf_inet,sock_dgram,0); if(udpsocket==-1) { perror("socket"); exit(1); } struct sockaddr_in toaddr; int lenght = sizeof(toaddr); // ... allowing broadcast (optional) int on=1; if(setsockopt(udpsocket,sol_socket,so_broadcast,&on,sizeof(int))==-1) { perror("setsockopt"); exit(1); } int s; for(;;) { //---- read next line on standard input ---- char msg[0x100]; char *buffer = malloc(100); if(!fgets(msg,0x100,stdin)) { break; } //---- send message specified destination/port ---- bzero(&toaddr,lenght); toaddr.sin_family=af_inet; toaddr.sin_port=htons(portnumber); toaddr.sin_addr.s_addr=ipaddress; s = sendto(udpsocket,msg,strlen(msg),0,(struct sockaddr *)&toaddr,lenght); printf("destination address %s -- port : %d ",inet_ntoa(toaddr.sin_addr),ntohs(toaddr.sin_port)); if( s == -1) { perror("sendto"); exit(1); } } //---- close udp socket ---- close(udpsocket); return 0; } //---------------------------------------------------------------------------- this log file :
08-20 10:07:56.885: d/libegl(22622): loaded /system/lib/egl/libegl_mali.so 08-20 10:07:56.890: d/libegl(22622): loaded /system/lib/egl/libglesv1_cm_mali.so 08-20 10:07:56.895: d/libegl(22622): loaded /system/lib/egl/libglesv2_mali.so 08-20 10:07:56.900: d/(22622): device driver api match 08-20 10:07:56.900: d/(22622): device driver api version: 10 08-20 10:07:56.900: d/(22622): user space api version: 10 08-20 10:07:56.900: d/(22622): mali: revision=linux-r2p4-02rel0 build_date=mon mar 5 09:47:55 kst 2012 08-20 10:07:56.925: d/openglrenderer(22622): enabling debug mode 0 08-20 10:08:05.555: w/dalvikvm(22622): threadid=11: thread exiting uncaught exception (group=0x40a2d1f8) 08-20 10:08:05.570: e/androidruntime(22622): fatal exception: thread-1053 08-20 10:08:05.570: e/androidruntime(22622): android.view.viewrootimpl$calledfromwrongthreadexception: original thread created view hierarchy can touch views. 08-20 10:08:05.570: e/androidruntime(22622): @ android.view.viewrootimpl.checkthread(viewrootimpl.java:4039) 08-20 10:08:05.570: e/androidruntime(22622): @ android.view.viewrootimpl.requestlayout(viewrootimpl.java:709) 08-20 10:08:05.570: e/androidruntime(22622): @ android.view.view.requestlayout(view.java:12675) 08-20 10:08:05.570: e/androidruntime(22622): @ android.view.view.requestlayout(view.java:12675) 08-20 10:08:05.570: e/androidruntime(22622): @ android.view.view.requestlayout(view.java:12675) 08-20 10:08:05.570: e/androidruntime(22622): @ android.view.view.requestlayout(view.java:12675) 08-20 10:08:05.570: e/androidruntime(22622): @ android.widget.relativelayout.requestlayout(relativelayout.java:268) 08-20 10:08:05.570: e/androidruntime(22622): @ android.view.view.requestlayout(view.java:12675) 08-20 10:08:05.570: e/androidruntime(22622): @ android.widget.textview.checkforrelayout(textview.java:6773) 08-20 10:08:05.570: e/androidruntime(22622): @ android.widget.textview.settext(textview.java:3306) 08-20 10:08:05.570: e/androidruntime(22622): @ android.widget.textview.settext(textview.java:3162) 08-20 10:08:05.570: e/androidruntime(22622): @ android.widget.textview.append(textview.java:2822) 08-20 10:08:05.570: e/androidruntime(22622): @ android.widget.textview.append(textview.java:2812) 08-20 10:08:05.570: e/androidruntime(22622): @ com.example.test_udp.mainactivity$receiver.run(mainactivity.java:70) 08-20 10:08:05.570: e/androidruntime(22622): @ java.lang.thread.run(thread.java:856) 08-20 10:08:05.790: d/openglrenderer(22622): flushing caches (mode 0) 08-20 10:08:06.325: d/openglrenderer(22622): flushing caches (mode 1) 08-20 10:13:05.715: i/process(22622): sending signal. pid: 22622 sig: 9
are sure when connected thru cable program works? not need check code, taking see in run method of thread, first line of code says: while (socket != null && !socket.isclosed()) both happen true way code written. doubt works wifi or cable.
i think should change thread's code this:
public void run() { try { socket = new datagramsocket(server_port); socket.setsotimeout(receiving_timeout_server); dataout = new byte[1024]; // inetaddress fromaddress = inetaddress.getbyname("10.4.0.11"); packetin = new datagrampacket(dataout, dataout.length); // keep receiving packets, until keepon set false while (keepon) { socket.receive(packetin); text.append("source port :" + packetin.getport() + "\n"); text.append("source address :" + packetin.getaddress().tostring() + "\n"); log.d("udp", "packet receveid"); string message = new string(packetin.getdata()); text.append(message +"\n"+ packetin.getport() +"\n"+ packetin.getaddress().tostring()); log.d("udp", "le message reçu"); log.d("message : ", "" + message); } } catch (unknownhostexception exc) { system.out.println("destinataire inconnu"); } catch (socketexception exc) { system.out.println("probleme d'ouverture de la socket"); } catch (ioexception exc) { system.out.println("probleme sur la reception du message"); } catch (exception exc) { exc.printstacktrace(); } }
Comments
Post a Comment