安卓Socket通信

安卓4.0以后socket通信时,socket的建立连接等不能直接在主进程中,需要新开进程。本文简单介绍了下socket在安卓中的应用,并给出了非常简单的代码。

前面那篇runnable和thread的文章算是一个小引子,是我疏漏的一个地方

socket 插座,这个名字很形象地解释了在通信过程总socket的作用。

在server上,serversocket就是一个大插座,而客户端的socket就像是插头,每个客户端连接上来,就相当于一个插头插在了插座上,连接成功就可以来传输数据了。

先看看server的写法

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.EOFException;
import java.io.IOException;
import java.net.BindException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;

public class Server {
    
    boolean started=false;
    ServerSocket server=null;

    public static void main(String[] args) {
        new Server().start();
    }
    
    public void start(){
        try {
            //监听9400端口
            server=new ServerSocket(9400);
            System.out.println("server started");
            started=true;
        }catch(BindException e){
            System.out.println("The port is on using....");
            System.exit(0);
        } catch (IOException e) {
            e.printStackTrace();
        }
        
            try {
                while(started){
                    //等待client连接
                    Socket s = server.accept();
                    Client c=new Client(s);
                    System.out.println("A client connected");
                    //!!!!!!!!!
                    new Thread(c).start();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }finally{
                try {
                    server.close();
                } catch (IOException e) {
                    
                    e.printStackTrace();
                }
            }
        
    }
    class Client implements Runnable{
        private Socket s;
        private DataInputStream dis=null;
        private DataOutputStream dos=null;
        private boolean isConnected=false;
        public Client(Socket s) {
            //仅仅测试,所以什么都没有
        }
        
}  
}
    

这个server是一个java的,直接运行即可

在看安卓端的client
MainActivity.java

package com.find.voter;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

AndroidMainfest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.find.voter"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="17" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

layout貌似git上错了,明天再改吧,界面就一个默认的文本框,添加了一个按钮。

 

先开启server,然后对安卓端run as,此时在server的console那里就会提示a client connected。

另外,我在写的过程中一直忘记了,runnable接口最后需要用thread包装一下才能跑。。。。。。

还有,用猎豹wifi建立的热点host的ip一般是192.168.191.1,可以通过这个来建立一个小型局域网。尽情耍吧。

文章版权归 FindHao 所有丨本站默认采用CC-BY-NC-SA 4.0协议进行授权|
转载必须包含本声明,并以超链接形式注明作者 FindHao 和本文原始地址:
https://www.findhao.net/easycoding/698

你可能喜欢:(相似内容推荐和广告都使用了谷歌的推荐系统,需要对本站取消广告屏蔽才能显示。感谢点击↓广告支持博主~)

Find

新浪微博(FindSpace博客)QQ群:不安分的Coder(375670127) 不安分的Coder

2 条回复

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*