博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
两个安卓手机的链接socket(套接字)编程
阅读量:6412 次
发布时间:2019-06-23

本文共 6064 字,大约阅读时间需要 20 分钟。

  hot3.png

偶然希望两个安卓手机能交互一下,所以写了两个安卓之间交互的程序,好吧我承认是从java socket套用过来的,但是,还是有点改变。。。。。。。

两个手机,一个做server,一个做client

首先是第一个server的:

主类:

public class MainActivity extends Activity { TextView qwe = null; static Toast tt = null; PrintWriter out ; @Override protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);  qwe = (TextView)findViewById(R.id.qwe);  /*静态的吐司,方便收到信息后其他线程调用*/  tt = Toast.makeText(MainActivity.this, "qe", Toast.LENGTH_SHORT);  OpenConnection(); }  public void OpenConnection(){  try {   ServerSocket s = new ServerSocket(6666);   //System.out.println("服务器端------监听中.....");   Socket socket = s.accept();   //System.out.println("开始:" + socket);   GetMessage gm = new GetMessage(socket,this);   out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);   Thread gt = new Thread(gm);   gt.start();  } catch (IOException e1) {   e1.printStackTrace();  } } @Override public boolean onCreateOptionsMenu(Menu menu) {  menu.add(0,0,0,"PRINT");  return true; }  @Override public boolean onMenuItemSelected(int featureId, MenuItem item) {   out.println("asdasd");//当点击的时候,就会发送出去字符串   out.flush();  return super.onMenuItemSelected(featureId, item); }}

发信的线程类:

 

public class SendMessage implements Runnable { PrintWriter out;    BufferedReader is;    public SendMessage(Socket socket) throws IOException    {            out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);        is = new BufferedReader(new InputStreamReader(System.in));    }    public void run()    {        String input = new String();            while (true)            {                try                {                    input = is.readLine().trim();                }                catch (IOException e)                {                    e.printStackTrace();                }                out.println(input);                System.out.print("服务器说:");                out.flush();            }        }}

收信的线程类:

 

package com.example.serve;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.net.Socket;public class GetMessage implements Runnable{ BufferedReader in; MainActivity context;    public GetMessage(Socket socket,MainActivity context)    {        try        {         this.context = context;            in = new BufferedReader(new InputStreamReader(socket.getInputStream()));        }        catch (IOException e)        {           e.printStackTrace();        }    }    public void run()    {         String str = "";            while (true)            {                try                {                    str = in.readLine();                }                catch (IOException e)                {                    e.printStackTrace();                }                if (str.equals("q"))                {                    break;                }                if(str!=null)                {                 System.out.print("客户端回应说:" + str);                 MainActivity.tt.show();                }            }    }}

 

然后是第二个client的手机程序:

 

public class MainActivity extends Activity { TextView tv = null; CGetMessage gm; CSendMessage sm; PrintWriter out ; static Toast tt = null; @Override protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);  tv = (TextView)findViewById(R.id.asd);  tt = Toast.makeText(MainActivity.this, "qe", Toast.LENGTH_SHORT); }  public void Open(){  try {   System.out.println("客户端!!" );   InetAddress addr = InetAddress.getByName("192.168.43.xx");//ip地址自己个性化   Socket socket = new Socket(addr, 6666);         System.out.println("客户端发出socket=" + socket);         out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);         gm = new CGetMessage(socket);         System.out.println("你好");         sm = new CSendMessage(socket);         Thread gt = new Thread(gm);         gt.start();  } catch (Exception e) {   e.printStackTrace();  } } @Override public boolean onCreateOptionsMenu(Menu menu) {  menu.add(0,0,0,"yiqi");  menu.add(0,1,1,"ni");  return true; }  @Override public boolean onMenuItemSelected(int featureId, MenuItem item) {  if(item.getItemId() == 0){   out.println("yiqi");   out.flush();  }  else{   Open();   //out.println("ni");   //out.flush();  }    return super.onMenuItemSelected(featureId, item); }}

然后同样是收信的类:

public class CGetMessage implements Runnable { private Socket socket;    BufferedReader in;    public CGetMessage(Socket socket)    {        this.socket = socket;    }    public void run()    {                    BufferedReader in;            String str = "";            while (true)            {                try                {                    in = new BufferedReader(new InputStreamReader(socket.getInputStream()));                    str = in.readLine();                }                catch (IOException e)                {                    e.printStackTrace();                }                if(str!=null){                 System.out.println("服务器回应说:" + str);                 MainActivity.tt.show();                }            }            }}

然后是发信的类:

 

public class CSendMessage implements Runnable { PrintWriter out;    BufferedReader is;    public CSendMessage(Socket socket) throws IOException    {        out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);        //is是读入的字符串        //is = new BufferedReader(new InputStreamReader(System.in));    }    public void run()    {     String input = new String();        while (true)        {            try            {                input = is.readLine().trim();            }            catch (IOException e)            {                e.printStackTrace();            }            out.println(input);            System.out.print("客户端说:");            out.flush();        }    }}

 

注意,两个程序需要安装在两个手机上(话说没人会傻到安到一个手机上吧),然后互相链接热点。。。今天的更新完毕

 

转载于:https://my.oschina.net/MrHou/blog/149003

你可能感兴趣的文章
技术成长之路(一)
查看>>
中国北方国际五金城硬件选型
查看>>
php.exe启动时提示缺少MVCR110.dall 64位 window系统 解决
查看>>
判断是否为数字方法
查看>>
[翻译] EF Core in Action 关于这本书
查看>>
js Uncaught TypeError: undefined is not a function
查看>>
数据库存储引擎
查看>>
[2019.2.13]BZOJ4318 OSU!
查看>>
版本号带两个小数点的,如何比较大小?( NSStringCompareOptions )
查看>>
QCustomplot使用分享(三) 图
查看>>
什么是java?
查看>>
WPF路径动画(动态逆向动画)
查看>>
Low Level Reader Protocol (LLRP) 简介
查看>>
[Micropython]TPYBoard v10x NRF24L01无线通讯模块使用教程
查看>>
mysql中show processlist过滤和杀死线程
查看>>
最新Sublime Text 2 激活 汉化
查看>>
基础数据类型之字典
查看>>
第七次作业
查看>>
Oracle中NVARCHAR2与VARCHAR2的区别
查看>>
php debug
查看>>