Android手机之间Socket通信
2016-05-12 20:00
716 查看
1 手机既可以做服务器也可以做客户端
2 Socket可以在Android App里运行
3 两部手机连接的是同一个WiFi才行,
服务器端:
2 Socket可以在Android App里运行
3 两部手机连接的是同一个WiFi才行,
服务器端:
package com.example.webserver_1; import java.io.IOException; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; import android.app.Activity; import android.content.Context; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; public class MainActivity extends Activity { private ServerSocket severSocket; private TextView ipTextView; private EditText editText1; private Button button1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ipTextView = (TextView) findViewById(R.id.ipTextView); editText1 = (EditText) findViewById(R.id.editText1); button1 = (Button) findViewById(R.id.button1); //ipTextView.setText(getIp());////显示服务器端ip地址 funThread();/////开始监听 }// /onCreate ////////////////////// private void funThread(){ new Thread(new Runnable() { @Override public void run() { // TODO 自动生成的方法存根 try { severSocket = new ServerSocket(2345); while (true) { Socket socket = severSocket.accept(); String serverMessage = "你好Tom123,我是服务器端的消息"; OutputStream os = socket.getOutputStream(); os.write(serverMessage.getBytes("utf-8")); os.flush(); socket.close(); } } catch (IOException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } } }).start(); }//funThread //////////////////////////////// private String getIp() { // 获取wifi服务 WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); // 判断wifi是否开启 if (!wifiManager.isWifiEnabled()) { wifiManager.setWifiEnabled(true); } WifiInfo wifiInfo = wifiManager.getConnectionInfo(); int ipAddress = wifiInfo.getIpAddress(); Log.i("ip", String.valueOf(ipAddress)); String ip = intToIp(ipAddress); return ip; }// /getIp private String intToIp(int i) { return (i & 0xFF) + "." + ((i >> 8) & 0xFF) + "." + ((i >> 16) & 0xFF) + "." + (i >> 24 & 0xFF); }// intToIp }// MainActivity客户端:
package com.example.clientserver_1; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.Socket; import java.net.UnknownHostException; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.widget.TextView; public class MainActivity extends Activity { private TextView messageTextView; private String result; private Handler handler; private Socket socket; private String serverResult; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); messageTextView = (TextView) findViewById(R.id.messageTextView); getServerMessage(); handler = new Handler() { @Override public void handleMessage(Message msg) { // TODO 自动生成的方法存根 super.handleMessage(msg); if (msg.what == 1) { //messageTextView.setText((String) msg.obj); Log.i("-------------客户端result-------------------", (String) msg.obj); } }// /handleMessage };// // handler = new Handler() }// onCreate private void getServerMessage() { new Thread(new Runnable() { @Override public void run() { // TODO 自动生成的方法存根 try { while(true){ Thread.sleep(500); socket = new Socket("192.168.0.111", 2345);///连接的是服务器地址,端口号相同 InputStream is = socket.getInputStream(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); int i=-1; while( (i=is.read()) !=-1 ){ baos.write(i); } result = baos.toString(); //Log.i("-------------客户端result-------------------", result); is.close(); socket.close(); // messageTextView.setText(result); Message msg = new Message(); msg.what = 1; msg.obj = result; handler.sendMessage(msg); } } catch (UnknownHostException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } catch (IOException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } catch (InterruptedException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } } }).start(); //return result; }// /getServerMessage }两个AndroidManifest.xml的权限相同
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> <uses-permission android:name="android.permission.GET_TASKS" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.READ_LOGS" />结果:(在客户端Log输出)
相关文章推荐
- java-模拟tomcat服务器
- Linux socket 初步
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析