Android Socket通讯

来源:互联网 发布:淘宝优站管理 编辑:程序博客网 时间:2024/05/20 09:07

1.由于版本问题,有的程序不能通讯,需添加以下代码在onCreate方法中  
 if (android.os.Build.VERSION.SDK_INT > 9){
     StrictMode.ThreadPolicy policy = newStrictMode.ThreadPolicy.Builder().permitAll().build();
      StrictMode.setThreadPolicy(policy);
 }
Android的主线程(又叫UI线程,线程ID为1)有一些限制策略,使得主线程有些事做不了,比如访问网络就不允许,否则就是报,但在2.3之后的版本,你可以通过添加以下代码更改其限制策略,从而强制使得主线程可以访问网络

StrictMode是一个开发工具主要用于侦测主线程中的磁盘和网络访问

2.服务器端

 

(1)监听端口
ServerSocket serverSocket = new ServerSocket(4000);
 0~1023的端口号为系统所保留,例如http服务的端口号为80,telnet服务的端口号为21,ftp服务的端口号为  23, 所以我们在选择端口号时,最好选择一个大于1023的数以防止发生冲突。
 (2)等待连接
Socket client = serverSocket.accept();
 (3)接受客户端信息
     BufferedReaderin=new BufferedReader(newInputStreamReader(client.getInputStream()));
     Stringstr=in.readLine();

(4 )向客户端发送数据
     PrintWriterout=new PrintWriter(new BufferedWriter(newOutputStreamWriter(client.getOutputStream())),true);
      out.println("服务器端的数据");

 (5)关闭连接

     in.close();
     out.close();

 

3.客户端

 (1)向指定服务器端端口,指定ip发送消息

 socket = new Socket("10.50.44.149", 3000);

(2)向服务区端发送消息

 PrintWriter out = new PrintWriter(newBufferedWriter(
      newOutputStreamWriter(socket.getOutputStream())), true);
    out.println("客户端消息");

(3)接受服务器端的消息
    BufferedReaderbr = new BufferedReader(new InputStreamReader(
      socket.getInputStream()));
    Stringmstr = br.readLine();

(4)关闭连接

    br.close();
    socket.close();

 4.完整代码

 (1)客户端 (android设备)

package com.example.qqqq;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

import android.annotation.TargetApi;
import android.app.Activity;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.StrictMode;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

//客户端的实现
@TargetApi(Build.VERSION_CODES.GINGERBREAD)
public class MainActivity extends Activity {


 private Button but1;
 private static int i = 0;
 String[] mesg = { "temperature", "humidity","co2" };
 private final String DEBUG_TAG ="mySocketAct";
 Socket socket = null;

 @TargetApi(Build.VERSION_CODES.GINGERBREAD)
 public void onCreate(Bundle savedInstanceState){
  super.onCreate(savedInstanceState);
  setContentView(R.layout.fragment_main);

  if(android.os.Build.VERSION.SDK_INT > 9) {
   StrictMode.ThreadPolicypolicy = new StrictMode.ThreadPolicy.Builder()
     .permitAll().build();
   StrictMode.setThreadPolicy(policy);
  }
  but1 = (Button)findViewById(R.id.but1);

  but1.setOnClickListener(newMyListener());

 }

 private class MyListener implementsOnClickListener {

  @Override
  public void onClick(View v){
//    ThreadTesttt = new ThreadTest();
   aaaaaa.sendEmptyMessageDelayed(0,500);
  }
 }

 private Handler aaaaaa = new Handler() {
  public voidhandleMessage(Message msg) {
   try {
    socket= new Socket("10.50.44.149", 3000);
    PrintWriterout = new PrintWriter(new BufferedWriter(
      newOutputStreamWriter(socket.getOutputStream())), true);
    intj = i++;
    out.println(mesg[j% 3]);
    BufferedReaderbr = new BufferedReader(new InputStreamReader(
      socket.getInputStream()));
    Stringmstr = br.readLine();
    if(mstr.contains("wendu")) {
     Log.d("test","温度:" + mstr.substring(5));
    }
    if(mstr.contains("shidu")) {
     Log.d("test","湿度:" + mstr.substring(5));
    }
    if(mstr.contains("co2")) {
     Log.d("test","co2:" + mstr.substring(3));
    }
    br.close();
    socket.close();
   } catch(UnknownHostException e) {
    //TODO Auto-generated catch block
    e.printStackTrace();
   } catch(IOException e) {
    //TODO Auto-generated catch block
    e.printStackTrace();
   }
   aaaaaa.sendEmptyMessageDelayed(0,500);
  }
 };
    protectedvoid onStop() {
        super.onStop();
        aaaaaa.removeMessages(0);

    }

}

xml

 

http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   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="com.example.qqqq.MainActivity$PlaceholderFragment">

   


(2)服务器端

package scoket;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.DecimalFormat;

public class Sockeet00 implements Runnable{
 public void run() {
  try {
   ServerSocketserverSocket=new ServerSocket(3000);
   DecimalFormatdf;
   System.out.println("接收用户连接:");
   while(true)
   {
//    
    Socketclient=serverSocket.accept();
    df= new DecimalFormat("0.00");
    try
    {
     //接受客户端信息
     BufferedReaderin=new BufferedReader(newInputStreamReader(client.getInputStream()));
     Stringstr=in.readLine();
     PrintWriterout=new PrintWriter(new BufferedWriter(newOutputStreamWriter(client.getOutputStream())),true);
     if(str.equals("temperature")){
      out.println("wendu:"+df.format(30+Math.random()));
     }
     if(str.equals("humidity")){
      out.println("shidu:"+df.format(25+Math.random()));
     }
     if(str.equals("co2")){
      out.println("co2:"+df.format(40+Math.random()));
     }
     
     in.close();
     out.close();
    }catch(Exceptionex)
    {
     System.out.println(ex.getMessage());
     ex.printStackTrace();
    }
    finally
    {
     client.close();
    }
   }
  } catch (IOException e) {
   System.out.println(e.getMessage());
  }
 }
 public static void main(String [] args)
 {
  Thread desktopServerThread=newThread(new Sockeet00());
  desktopServerThread.start();
 }
}

 

 

 

 

 

 

 

 

 

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 新办的手机号注册过魅族账号怎么办 百度网盘手机找回被别人关了怎么办 把朋友微信号弄没了怎么办 小米顶配版手机无线网速度慢怎么办 刺激战场用过模拟器后用手机怎么办 百度网盘分享文件有违禁内容怎么办 百度网盘好友发的分享不存在怎么办 4g手机的下载速度很慢怎么办 为什么打开百度网盘的速度慢怎么办 百度网盘限制了我的宽带速度怎么办 联通信号很好但网速特别慢怎么办 苹果手机版本低下载不了软件怎么办 国内的手机要上推特和油管要怎么办 推特注册了卡在手机号怎么办 腾讯微信登录的账号密码忘了怎么办 打开手机浏览器自动跳到网页怎么办 游戏包解压后找不到启动的怎么办? 每次都要解压一次才能运行怎么办 误冲了王者荣耀点劵怎么办 机顶盒上开通的vip手机上怎么办 王者荣耀以前玩的区找不到了怎么办 电脑分辨率调高了游戏进不去怎么办 键盘语言更改后进不去系统怎么办 高尔夫旅行款 被锁在车内怎么办 在天猫买东西垫付的运费不退怎么办 天猫店一口价定价定低了怎么办 服务器开机账号改了密码忘了怎么办 小米儿童电话手表开不开机怎么办? 上海拍牌超过5次违章怎么办 拍拍贷不能更新还不了款怎么办 起诉网贷平台不知道地址怎么办 网贷不知道在哪个平台借的怎么办 车过户后出现问题车主不承认怎么办 卖了车买家一直不过户怎么办 我的车卖了但是买家不过户怎么办 如果买家拍了赠品但联系不上怎么办 淘宝产品处罚下架顾客退货怎么办 生源地贷款续贷密码忘了怎么办 助学贷款续贷密码忘了怎么办 京东上回收东西如果是坏的怎么办 58.同城找的工作被骗了怎么办