android socket简单编程(java在PC本地创建服务器)

来源:互联网 发布:二阶张量的散度 知乎 编辑:程序博客网 时间:2024/06/06 02:51

笔者此文也不太详述socket的原理了,主要是给新手一个demo,能够更好地理解android上的socket。


主要内容:

1、在java上搭建一个简单服务器接收数据

2、在android上建立客户端传递数据


最终接收到数据效果:





本文已经说了是使用java在PC本地创建服务器,首先肯定是要获取本地的IP地址,百度上方法有很多,笔者使用的是在cmd框中输入ipconfig | findstr IPv4或者ipconfig/all查看,具体效果如图(图上是笔者的IP):





然后实现服务器端程序,笔者是在eclipse中创建一个项目,直接定义一个JAVA类,如下:


import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.net.ServerSocket;import java.net.Socket;public class SimpleServer {public static void main(String[] args)throws IOException{System.out.println("start while22");//创建一个ServerSocket,用于监听客户端Socket的连接请求ServerSocket ss=new ServerSocket(30000);while(true){//每当接收到客户端Socket请求的时候,服务器端也对应产生一个Socket//将Socket对应的输入流包装秤ButtferedReader            //进行普通IO操作//关闭流,关闭SocketSocket socket=ss.accept();BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));              String str = in.readLine();              System.out.println("来自客户端的数据为:" + str);                           in.close();            socket.close();}}}


接着再实现客户端代码:

此处一定要用虚拟机,一定要用虚拟机,一定要用虚拟机。如果用真机运行客户端是找不到你的本地服务器的,笔者在此点上折腾了好多时间,期间一直在怀疑是自己的代码写错了。。。。

MainActivity:

import android.app.Activity;import android.content.DialogInterface;import android.os.Bundle;import android.os.Message;import android.support.design.widget.FloatingActionButton;import android.support.design.widget.Snackbar;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.Toolbar;import android.view.View;import android.view.Menu;import android.view.MenuItem;import android.widget.Button;import android.widget.TextView;import android.widget.Toast;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStream;import java.net.Socket;import java.util.logging.Handler;import java.util.logging.LogRecord;public class MainActivity extends Activity implements View.OnClickListener {    private Button button;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        button=(Button)findViewById(R.id.button);        button.setOnClickListener(this);    }    @Override    public void onClick(View view) {        switch (view.getId()){            case R.id.button:                new Thread()                {                    @Override                    public void run() {                        super.run();                        try {                            //创建Socket                            Socket socket=new Socket("10.3.18.49",30000);                            //向服务器发送消息                            //建立输出流                            OutputStream out=socket.getOutputStream();                            out.write("1111111111".getBytes("utf-8"));                            //关闭流                            out.close();                            //关闭Socket                            socket.close();                        } catch (IOException e) {                            e.printStackTrace();                        }                    }                }.start();                break;        }    }}

activity_main:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    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"    android:orientation="vertical"    >    <Button        android:id="@+id/button"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="SocketTest" /></LinearLayout>

最后不要忘记在AndroidManifest中添加访问网络的权限:

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



末尾是贴上笔者实现的时候的一些图,希望有助于读者理解:


实现的时候打开了,android studio,虚拟机,以及eclipse。(笔者电脑一般,特别卡。。)



由于是为了测试,所以activity布局比较简单,就只有一个button来发送数据。



0 0
原创粉丝点击