安卓手机socket通信(服务器和客户端)

本文实例为大家分享了安卓手机socket通信代码,供大家参考,具体内容如下

1、socket通信首先要定义好服务端的ip地址和端口号;

(1).首先看服务端的代码:

package com.example.androidsockettest; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.app.Activity; import android.content.Context; import android.view.Menu; import android.widget.TextView; public class MainActivity extends Activity { public static ServerSocket serverSocket = null; public static TextView mTextView, textView1; private String IP = ""; String buffer = ""; public static Handler mHandler = new Handler() { @Override public void handleMessage(android.os.Message msg) { if (msg.what==0x11) { Bundle bundle = msg.getData(); mTextView.append("client"+bundle.getString("msg")+"\n"); } }; }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mTextView = (TextView) findViewById(R.id.textsss); textView1 = (TextView) findViewById(R.id.textView1); IP = getlocalip(); textView1.setText("IP addresss:"+IP); new Thread() { public void run() { Bundle bundle = new Bundle(); bundle.clear(); OutputStream output; String str = "通信成功"; try { serverSocket = new ServerSocket(30000); while (true) { Message msg = new Message(); msg.what = 0x11; try { Socket socket = serverSocket.accept(); output = socket.getOutputStream(); output.write(str.getBytes("UTF-8")); output.flush(); socket.shutdownOutput(); //mHandler.sendEmptyMessage(0); BufferedReader bff = new BufferedReader(new InputStreamReader(socket.getInputStream())); String line = null; buffer = ""; while ((line = bff.readLine())!=null) { buffer = line + buffer; } bundle.putString("msg", buffer.toString()); msg.setData(bundle); mHandler.sendMessage(msg); bff.close(); output.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } } } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } }; }.start(); } private String getlocalip(){ WifiManager wifiManager = (WifiManager)getSystemService(Context.WIFI_SERVICE); WifiInfo wifiInfo = wifiManager.getConnectionInfo(); int ipAddress = wifiInfo.getIpAddress(); // Log.d(Tag, "int ip "+ipAddress); if(ipAddress==0)return null; return ((ipAddress & 0xff)+"."+(ipAddress>>8 & 0xff)+"." +(ipAddress>>16 & 0xff)+"."+(ipAddress>>24 & 0xff)); } }

(2).因为是手机做服务端,所以在开始操作的时候客户端是不知道ip和端口号的,但在服务端运行后就可以看到(亲:你可以自己测试)

2、客户端的代码

package com.example.andoroidclient; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.InetSocketAddress; import java.net.Socket; import java.net.SocketTimeoutException; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.app.Activity; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; public class MainActivity extends Activity { Socket socket = null; String buffer = ""; TextView txt1; Button send; EditText ed1; String geted1; public Handler myHandler = new Handler() { @Override public void handleMessage(Message msg) { if (msg.what == 0x11) { Bundle bundle = msg.getData(); txt1.append("server:" + bundle.getString("msg") + "\n"); } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); txt1 = (TextView) findViewById(R.id.txt1); send = (Button) findViewById(R.id.send); ed1 = (EditText) findViewById(R.id.ed1); new MyThread("建立连接").start(); send.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { geted1 = ed1.getText().toString(); txt1.append("client:" + geted1 + "\n"); // 启动线程 向服务器发送和接收信息 new MyThread(geted1).start(); } }); } class MyThread extends Thread { public String txt1; public MyThread(String str) { txt1 = str; } @Override public void run() { // 定义消息 Message msg = new Message(); msg.what = 0x11; Bundle bundle = new Bundle(); bundle.clear(); try { // 连接服务器 并设置连接超时为5秒 socket = new Socket(); socket.connect(new InetSocketAddress("172.20.226.11", 30000), 1000); // 获取输入输出流 OutputStream ou = socket.getOutputStream(); BufferedReader bff = new BufferedReader(new InputStreamReader(socket.getInputStream())); // 读取发来服务器信息 String line = null; buffer = ""; while ((line = bff.readLine()) != null) { buffer = line + buffer; } // 向服务器发送信息 ou.write(txt1.getBytes("gbk")); ou.flush(); bundle.putString("msg", buffer.toString()); msg.setData(bundle); // 发送消息 修改UI线程中的组件 myHandler.sendMessage(msg); // 关闭各种输入输出流 bff.close(); ou.close(); socket.close(); } catch (SocketTimeoutException aa) { // 连接超时 在UI界面显示消息 bundle.putString("msg", "服务器连接失败!请检查网络是否打开"); msg.setData(bundle); // 发送消息 修改UI线程中的组件 myHandler.sendMessage(msg); } catch (IOException e) { e.printStackTrace(); } } } }

3、最后别忘记加网络权限

<uses-permission android:name="android.permission.INTERNET" />

源码下载:http://xiazai.jb51.net/201608/yuanma/android-socket(jb51.net).rar

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

时间: 2024-09-20 10:40:13

安卓手机socket通信(服务器和客户端)的相关文章

安卓手机socket通信(服务器和客户端)_Android

本文实例为大家分享了安卓手机socket通信代码,供大家参考,具体内容如下 1.socket通信首先要定义好服务端的ip地址和端口号:  (1).首先看服务端的代码: package com.example.androidsockettest; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import

服务器-关于基于socket通信的多用户客户端不能通信

问题描述 关于基于socket通信的多用户客户端不能通信 单个客户端可以接受到自己发送的消息.但多客户端的话,甲方发送数据,乙方可以接受,但乙方接受后不能发送数据,一旦发送数据,服务器就会崩溃! 解决方案 检查下你的服务器端程序,多线程同步或者哪里是不是有bug,加上try catch拦截下看看有什么异常发生. 解决方案二: 主要还是你服务器处理有问题.可以加一下log等来看你服务端到底是哪里没有处理正确.大多数是越界,指针操作不对. 解决方案三: 不知道lz考虑其他方法不,用comet可以实现

使用Socket通信实现Silverlight客户端实时数据的获取(模拟GPS数据,地图实时位置)

原文:使用Socket通信实现Silverlight客户端实时数据的获取(模拟GPS数据,地图实时位置) 在上一篇中说到了Silverlight下的Socket通信,在最后的时候说到本篇将会结合地图.下面就来看看本文实现的功能: Silverlight 与服务器利用Socket通讯,实时从服务器获取数据(本文中的数据是地理坐标),由于没有GPS,所以本文在服务器写了一个构造新坐标的函数(本文是一个三角函数),然后利用Timer组件,实时调用,得到新的坐标,并将新的坐标发送给客户端,客户端接收到发

Socket 通信原理(Android客户端和服务器以TCP&amp;amp;&amp;amp;UDP方式互通)

ZERO.前言 有关通信原理内容是在网上或百科整理得到,代码部分为本人所写,如果不当,还望指教. 一.Socket通信简介  Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信.两者的最大差异在于,http连接使用的是"请求-响应方式",即在请求时建立连接通道,当客户端向服务器发送请求后,服务器端才能向客户端返回数据.而Socket通信则是在双方建立起连接后就可以直接进行数据的传输,在连接时可实现信息的主动推送,而不需要每次由客户端想服务器发送请求. 那

java 通过 socket 实现 服务器和客户端的通信 TCP

 // JBulder 9.0下执行 package me; import java.net.* ;   //网络编程有关的类在此包 import java.io.* ;  //用到 输入输出流 public class JavaNet {   public static void main(String []args)   {      if(args.length>0)        runServer() ;        else          runClient() ;     }

Android客户端与PC服务器如何实现Socket通信

本文介绍Android终端持续扫描AP信息并发送给服务器端的实现.首先基于TCP协议在Android终端和PC两端之间形成网络虚拟链路.使用ServerSocket创建TCP服务器端,然后在Android客户端使用Socket的构造器来连接服务器.其中Android终端通过WIFI连接和PC处于同一局域网. 1. PC服务器启用ServerSocket 两个通信实体在建立虚拟链路之前,需要有一方先准备好,主动接受来自其他通信实体的连接请求. 使用ServerSocket对象监听来自客户端的Soc

通信-android 客户端socket连接服务器,socket何时close

问题描述 android 客户端socket连接服务器,socket何时close 假设socket连接好了,现在客户端向服务器发送完了数据,这个时候需要关闭socket吗?如果关闭后,某个时候又需要发送其他数据,再建立连接? 还是说建立通信协议,一次socket连接后一直保持通信状态,根据通信协议对不同的数据进行不同的处理,然后等客户端程序退出时再关闭socket. 解决方案 Android客户端通过Socket连接服务器Android客户端与java服务器端的Socket连接Socket服务

安卓 java socket ip-手机安卓客户端和电脑服务器进行socket通信,为什么socket不通?

问题描述 手机安卓客户端和电脑服务器进行socket通信,为什么socket不通? 手机安卓客户端和电脑服务器进行socket通信,程序都是java写的,客户端socket函数填的是电脑的外网ip(百度搜出来那个),手机用的是3g信号,但是socket不通..是ip填错了吗? 解决方案 楼主 我不会 你要是实现了 可以和我交流一下么?

python服务器与android客户端socket通信实例_python

本文实例讲述了python服务器与android客户端socket通信的方法.分享给大家供大家参考.具体实现方法如下: 首先,服务器端使用python完成,下面为python代码: 复制代码 代码如下: #server.py  import socket  def getipaddrs(hostname):#只是为了显示IP,仅仅测试一下      result = socket.getaddrinfo(hostname, None, 0, socket.SOCK_STREAM)      re