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程序设计有所帮助。