Android编程实现简单的UDP Client实例
本文实例讲述了Android编程实现简单的UDPClient。分享给大家供大家参考,具体如下:
该代码在4.2.2内调试通过
1.记得加权限
<uses-permissionandroid:name="android.permission.INTERNET"/>
注意:Android4.0之后,就不能在主线程进行socket通信,否则会抛异常。
2.代码
MainActivity.java:
packagemao.example.quicksend; importandroid.app.Activity; importandroid.content.Context; importandroid.os.Bundle; importandroid.os.Handler; importandroid.util.Log; importandroid.view.Menu; importandroid.view.MenuItem; importandroid.widget.Button; importandroid.widget.TextView; importandroid.widget.Toast; importandroid.view.View; publicclassMainActivityextendsActivity{ @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); InitUI(); //获得Button对象 ButtonbtnConnect=(Button)findViewById(R.id.buttonConnect); btnConnect.setOnClickListener(newButton.OnClickListener(){ publicvoidonClick(Viewv) { //这里处理事件 //ConnectServer(); //UDPClientudpET=newUDPClient("192.168.0.14","123"); //udpET.start(); //DisplayToast("点击了\"连接\"按钮"); } }); //发送Button btnConnect=(Button)findViewById(R.id.buttonSend); btnConnect.setOnClickListener(newButton.OnClickListener(){ publicvoidonClick(Viewv) { //这里处理事件 SendText(); } }); } @Override publicbooleanonCreateOptionsMenu(Menumenu){ //Inflatethemenu;thisaddsitemstotheactionbarifitispresent. getMenuInflater().inflate(R.menu.main,menu); returntrue; } @Override publicbooleanonOptionsItemSelected(MenuItemitem){ //Handleactionbaritemclickshere.Theactionbarwill //automaticallyhandleclicksontheHome/Upbutton,solong //asyouspecifyaparentactivityinAndroidManifest.xml. intid=item.getItemId(); if(id==R.id.action_settings){ returntrue; } returnsuper.onOptionsItemSelected(item); } /*显示Toast*/ publicvoidDisplayToast(Stringstr) { Toast.makeText(this,str,Toast.LENGTH_SHORT).show(); } publicvoidInitUI() { TextViewtext=(TextView)findViewById(R.id.editTextIP); text.setText("192.168.0.14"); text=(TextView)findViewById(R.id.editTextFilePath); text.setText("UdpClientSendTest"); } //connectserver publicvoidSendText() { TextVieweditIP=(TextView)findViewById(R.id.editTextIP); TextVieweditText=(TextView)findViewById(R.id.editTextFilePath); Stringmessage=editText.getText().toString()+"\r\n"; UDPClientudpET=newUDPClient(editIP.getText().toString(),message); udpET.start(); } }
UDPClient.java:
packagemao.example.quicksend; importjava.io.IOException; importjava.net.DatagramPacket; importjava.net.DatagramSocket; importjava.net.InetAddress; importjava.net.SocketException; importjava.lang.String; publicclassUDPClientextendsThread{ publicStringm_serverIP; publicStringm_text; publicUDPClient(StringstrServerIP,StringstrText) { m_serverIP=strServerIP; m_text=strText; } @Override publicvoidrun(){ //TODOAuto-generatedmethodstub intTIMEOUT=3000; intservPort=8800; byte[]bytesToSend=m_text.getBytes();//"test_client".getBytes(); try{ InetAddressserverAddress=InetAddress.getByName(m_serverIP); DatagramSocketsocket=newDatagramSocket(); socket.setSoTimeout(TIMEOUT); DatagramPacketsendPacket=newDatagramPacket(bytesToSend,bytesToSend.length,serverAddress,servPort); socket.send(sendPacket); socket.close(); }catch(SocketExceptione){ e.printStackTrace(); }catch(IOExceptione){ e.printStackTrace(); } } }
3.activity_main.xml:
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/LinearLayout1" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="mao.example.quicksend.MainActivity"> <EditText android:id="@+id/editTextIP" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/text_IP"/> <Button android:id="@+id/buttonConnect" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/text_connect"/> <EditText android:id="@+id/editTextFilePath" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/text_filePath"> <requestFocus/> </EditText> <Button android:id="@+id/buttonFileSel" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/text_sel"/> <Button android:id="@+id/buttonSend" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/text_send"/> </LinearLayout>
更多关于Android相关内容感兴趣的读者可查看本站专题:《Android通信方式总结》、《Android调试技巧与常见问题解决方法汇总》、《Android开发入门与进阶教程》、《Android多媒体操作技巧汇总(音频,视频,录音等)》、《Android基本组件用法总结》、《Android视图View技巧总结》、《Android布局layout技巧总结》及《Android控件用法总结》
希望本文所述对大家Android程序设计有所帮助。