Android与server通信中的方法(TCP)高效的安全完整

我以前一直使用sockets实现emulator和PC进行通讯,卡了几天,最后请教其它人最终能够连接了。  错误原因是在IP和port,IP要用本机IP(在CMD输入ipconfig。注意:每次开机本机IP都不同,ADSL是动态IP),port用emulator的名称,5554或5556.java sever文件要另外建javaproject执行。在androidproject执行不了java(run application)

client代码:

Java代码

package com.yarin.android.Examples_08_04;   

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;   

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;   

public class Activity01 extends Activity
{
    private final String        DEBUG_TAG   = "Activity01";   

    private TextView    mTextView=null;
    private EditText    mEditText=null;
    private Button      mButton=null;   

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);   

        mButton = (Button)findViewById(R.id.Button01);
        mTextView=(TextView)findViewById(R.id.TextView01);
        mEditText=(EditText)findViewById(R.id.EditText01);   

        //登陆
        mButton.setOnClickListener(new OnClickListener()
        {
            public void onClick(View v)
            {
                Socket socket = null;
                String message = mEditText.getText().toString() + "\r\n";
                try
                {
                    //创建Socket
                    socket = new Socket("116.29.27.138",5554); //查看本机IP,每次开机都不同
                    //socket=new Socket("192.168.1.110",50000);
                    //向server发送消息
                    PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);
                    out.println(message);    

                    //接收来自server的消息
                    BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                    String msg = br.readLine();    

                    if ( msg != null )
                    {
                        mTextView.setText(msg);
                    }
                    else
                    {
                        mTextView.setText("数据错误!");
                    }
                    //关闭流
                    out.close();
                    br.close();
                    //关闭Socket
                    socket.close();
                }
                catch (Exception e)
                {
                    // TODO: handle exception
                    Log.e(DEBUG_TAG, e.toString());
                }
            }
        });
    }
}  

package com.yarin.android.Examples_08_04; 

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket; 

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView; 

public class Activity01 extends Activity
{
private final String DEBUG_TAG = "Activity01"; 

private TextView mTextView=null;
private EditText mEditText=null;
private Button mButton=null; 

@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main); 

mButton = (Button)findViewById(R.id.Button01);
mTextView=(TextView)findViewById(R.id.TextView01);
mEditText=(EditText)findViewById(R.id.EditText01); 

//登陆
mButton.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
Socket socket = null;
String message = mEditText.getText().toString() + "\r\n";
try
{
//创建Socket
socket = new Socket("116.29.27.138",5554); //查看本机IP,每次开机都不同
//socket=new Socket("192.168.1.110",50000);
//向server发送消息
PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);
out.println(message); 

//接收来自server的消息
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String msg = br.readLine(); 

if ( msg != null )
{
mTextView.setText(msg);
}
else
{
mTextView.setText("数据错误!");
}
//关闭流
out.close();
br.close();
//关闭Socket
socket.close();
}
catch (Exception e)
{
// TODO: handle exception
Log.e(DEBUG_TAG, e.toString());
}
}
});
}
}

server端代码:

Java代码

package com.yarin.android.Examples_08_04;   

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;   

public class Server implements Runnable
{
    public void run()
    {
        try
        {
            //创建ServerSocket
            ServerSocket serverSocket = new ServerSocket(5554);
            while (true)
            {
                //接受客户端请求
                Socket client = serverSocket.accept();
                System.out.println("accept");
                try
                {
                    //接收客户端消息
                    BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
                    String str = in.readLine();
                    System.out.println("read:" + str);
                    //向服务器发送消息
                    PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(client.getOutputStream())),true);
                    out.println("server message");
                    //关闭流
                    out.close();
                    in.close();
                }
                catch (Exception e)
                {
                    System.out.println(e.getMessage());
                    e.printStackTrace();
                }
                finally
                {
                    //关闭
                    client.close();
                    System.out.println("close");
                }
            }
        }
        catch (Exception e)
        {
            System.out.println(e.getMessage());
        }
    }
    //main函数。开启服务器
    public static void main(String a[])
    {
        Thread desktopServerThread = new Thread(new Server());
        desktopServerThread.start();
    }
}  

版权声明:本文博主原创文章,博客,未经同意不得转载。

时间: 2024-07-29 00:17:29

Android与server通信中的方法(TCP)高效的安全完整的相关文章

C#将图片存放到SQL SERVER数据库中的方法

本文实例讲述了C#将图片存放到SQL SERVER数据库中的方法.分享给大家供大家参考.具体如下: 第一步: //获取当前选择的图片 this.pictureBox1.Image = Image.FromStream(this.openFileDialog1.OpenFile()); //获取当前图片的路径 string path = openFileDialog1.FileName.ToString(); //将制定路径的图片添加到FileStream类中 FileStream fs = ne

Android与server通信的方法之中的一个(json)效率不高安全性不好

http通信.以xml或者json为载体.相互通信数据. Android对于http的网络通信,提供了标准的java接口--httpURLConnection接口.以及apache的接口--httpclient接口.当中我自己用的比較多的而是httpclient这个接口,由于它的功能更为丰富非常有效. 同一时候http通信也分为post方式和get的方式,两个相比較的话.post传送的数据量比較大,安全性也比較高.因此在做数据查询时.我会用get方式.而在做数据加入.改动或删除时,我就用Post

android自定义控件(四) View中的方法

onFinishInflate() 当View中所有的子控件 均被映射成xml后触发 onMeasure(int, int) 确定所有子元素的大小 onLayout(boolean, int, int, int, int) 当View分配所有的子元素的大小和位置时触发 onSizeChanged(int, int, int, int) 当view的大小发生变化时触发 onDraw(Canvas) view渲染内容的细节 onKeyDown(int, KeyEvent) 有按键按下后触发 onKe

[Android]ADB Server didn't ACK错误的解决方法

Eclipse中调试的时候报错 [2014-06-18 13:07:49 - DinnerBooker] The connection to adb is down, and a severe error has occured.[2014-06-18 13:07:49 - DinnerBooker] You must restart adb and Eclipse.[2014-06-18 13:07:49 - DinnerBooker] Please ensure that adb is co

Android手机之间通过声音传输信息方法——声波通信(含工程代码)

大家可能都用过支付宝的声波支付,即两个终端同时打开该功能,一个终端作为发送端send,一个终端作为接收端get,send将本终端上发出的请求信息按照约定规则的算法进行声音编码,并播放出来,get端接收到send发来的声音数据,按照约定规则进行解码,即获得了相应的信息. 原理如上,其实很简单,就是用单频率声音信号对数据进行编码,然后播放这些单频率声音,接收方在收到声音后,识别出频率,然后根据频率解码出数据. 最简单的方法就是把0-9赋予特定的频率,将需要传输的数据转成十进制的数,分别赋予特定的频率

Android开发中回调方法的简单应用

"回调/回调方法"这个词语对我们程序员来说肯定不陌生.在Android的学习及开发过程中,我们经常会听到也会用到"回调(回调方法)"这个词,那么什么是回调呢:在类A中定义了一个方法,这个方法中用到了一个接口(Interface)和该接口中的方法,但是这个方法方法没有具体的实现,需要在类B中去实现,类B实现该方法具体业务处理后,再传递给A类,供A类去调用,这种机制就称为回调.A来B去听起来有点拗口,下面我们用个简单的例子来实现. 我们在Activity中定义了一个Li

[c#源码分享]TCP通信中的大文件传送

源码   (为节省空间,不包含通信框架源码,通信框架源码请另行下载) 文件传送在TCP通信中是经常用到的,本文针对文件传送进行探讨 经过测试,可以发送比较大的文件,比如1个G或者2个G 本文只对文件传送做了简单的探讨,示例程序可能也不是很成熟,希望本文起到抛砖引玉的作用,有兴趣的朋友帮忙补充完善 首先看一下实现的效果 服务器端: 客户端(一次只能发送一个文件): 服务器端收到的文件,存放到了D盘根目录下(存放的路径可以根据情况修改) 本程序基于开源的networkcomms2.3.1通信框架 下

Android之Http通信——5.开发中遇到的一些问题

Android之Http通信--5.开发中遇到的一些问题 标签(空格分隔): 未分类 本节引言: 好吧,好久没在这里更新blog了,不是小猪偷懒了,其实是在忙一些其他的事情,本来这节是应该讲解下结合Retrofit来封装Http请求的,不过,上周在使用基本的HttpClient和HttpURLConnection做项目的时候遇到了两个问题,纠结了几天,小猪还是觉得有必要mark一下,分别是Http请求的Cookie问题和像服务器发送PUT请求的问题,没错是"PUT"而不是GET或者PO

Android基础——Messenger在跨进程通信中的使用

Messenger在跨进程通信中的使用 事先说明: 本人也是个初学者,所以本文是从初学者的角度入手,如果有不妥的地方请留言教导我,谢谢. 本篇文章主要针对讲解Messenger的使用和Messenger在应用层上的原理解析和Messenger在服务端的回复. 什么是Messenger? Messenger可以翻译为信使,Messenger是一种轻量级的IPC方案,通过它可以在不同进程中传递Message对象,在Message中放入我们需要传递的数据,就可以实现数据的进程间传递了. 步骤一:Mes