android网络通信之socket编程

来源:互联网 发布:怎么看淘宝宝贝销量 编辑:程序博客网 时间:2024/06/05 09:34
<span style="color:#333333;">/*  *   * android学习之 Socket编程  * UDP传输协议: 类似邮递,以数据包的形式发送。速度比较快,但目标是否正确接收,不负责验证。  * 以DatagramSocket/DatagramPackages处理。  * TCP传输协议:准确度较高,能够验证数据传输是否成功。  * 以ServerSocket/InputStream处理。  * 以TCP协议为例实现过程中遇到的问题  *   * 第一种测试:Tcp通信 */  /*服务器端*/package com.linxiaosheng.javanet;import java.io.IOException;import java.io.InputStream;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;import java.net.NetworkInterface;import java.net.ServerSocket;import java.net.Socket;import java.net.SocketException;import java.util.Enumeration;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import com.linxiaosheng.R;public class ServerActivity extends Activity{private Button button;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);this.setContentView(R.layout.server);button=(Button)findViewById(R.id.button1);button.setOnClickListener(new ButtonClickListener());}class ButtonClickListener implements OnClickListener{@Overridepublic void onClick(View v) {// TODO Auto-generated method stubSystem.out.println(GetHostIp());  Thread thread=new Thread(new MyThread());thread.start();}}class MyThread implements Runnable{@Overridepublic void run() {// TODO Auto-generated method stubServerSocket serverSocket=null;try {serverSocket=new ServerSocket(8081);Socket socket=serverSocket.accept();InputStream inputStream=socket.getInputStream();byte[] b=new byte[1024*4];int num=0;while((num=inputStream.read(b))!=-1){System.out.println(new String(b,0,num));}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{try {serverSocket.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}//用于获取android机ippublic String GetHostIp() {           try {              for (Enumeration<NetworkInterface> en = NetworkInterface              .getNetworkInterfaces(); en.hasMoreElements();) {                  NetworkInterface intf = en.nextElement();                  for (Enumeration<InetAddress> ipAddr = intf.getInetAddresses(); ipAddr                  .hasMoreElements();) {                      InetAddress inetAddress = ipAddr.nextElement();                      if (!inetAddress.isLoopbackAddress()) {                          return inetAddress.getHostAddress();                      }                  }              }          }  catch (Exception e) {            }          return null;      }  }</span>


package com.linxiaosheng.net;/*客户端*/import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.Socket;public class TCP {public static void main(String args[]){Socket socket=null;InputStream is=null;OutputStream os=null;try {socket=new Socket("192.168.191.2", 8081);is=new FileInputStream(new File("./bin/noteSendList.jsp"));os=socket.getOutputStream();byte[] b=new byte[4*1024];int num=0;while((num=is.read(b))!=-1){os.write(b, 0, num);}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{try {os.flush();os.close();is.close();socket.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}
/*第二种通信:UDP*/<span style="white-space:pre"></span>          package com.linxiaosheng.javanet;import java.io.IOException;import java.io.InputStream;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;import java.net.NetworkInterface;import java.net.ServerSocket;import java.net.Socket;import java.net.SocketException;import java.util.Enumeration;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import com.linxiaosheng.R;/*服务器端*/public class ServerActivity extends Activity{private Button button;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);this.setContentView(R.layout.server);button=(Button)findViewById(R.id.button1);button.setOnClickListener(new ButtonClickListener());}class ButtonClickListener implements OnClickListener{@Overridepublic void onClick(View v) {// TODO Auto-generated method stubSystem.out.println(GetHostIp());  Thread thread=new Thread(new MyThread());thread.start();}}class MyThread implements Runnable{@Overridepublic void run() {// TODO Auto-generated method stubDatagramSocket socket=null;try {socket=new DatagramSocket(8082);byte b[]=new byte[1024];DatagramPacket packet=new DatagramPacket(b, b.length);socket.receive(packet);System.out.println(packet.getLength());System.out.println(new String(b).toString());} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{socket.close();}}}//用于获取android机ippublic String GetHostIp() {            try {              for (Enumeration<NetworkInterface> en = NetworkInterface              .getNetworkInterfaces(); en.hasMoreElements();) {                  NetworkInterface intf = en.nextElement();                  for (Enumeration<InetAddress> ipAddr = intf.getInetAddresses(); ipAddr                  .hasMoreElements();) {                      InetAddress inetAddress = ipAddr.nextElement();                      if (!inetAddress.isLoopbackAddress()) {                          return inetAddress.getHostAddress();                      }                  }              }          }  catch (Exception e) {            }          return null;      }  }

/*客户端*/<span style="white-space:pre"></span>          package com.linxiaosheng.net;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;public class UDP {public static void main(String args[]){//创建一个inetaddressInetAddress laddr=null;//创建datagramsocketDatagramSocket datagramSocket=null;InputStream is=null;try {laddr = InetAddress.getByName("192.168.191.2");//这里不能默认绑定地址,否则会出现java.net.BindException: Cannot assign requested address的错误//目标地址要绑定在数据包datagramSocket=new DatagramSocket(8082);//读取文件is=new FileInputStream(new File("./bin/noteSendList.jsp"));byte[] b=new byte[1024];int len=0;while((len=is.read(b))!=-1){DatagramPacket packet=new DatagramPacket(b,len,laddr,8082);datagramSocket.send(packet);}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{try {//关闭流is.close();//关闭socketdatagramSocket.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}



0 0
原创粉丝点击