码迷,mamicode.com
首页 > 移动开发 > 详细

安卓TCP通信版本2

时间:2015-11-14 12:31:09      阅读:378      评论:0      收藏:0      [点我收藏+]

标签:

PC做服务器,安卓做客户端。

安卓获取输入框的内容并发送,然后等待接收服务器的消息

服务器先行开启,接收到客户端的数据,然后回复消息。

 

实现了对线程类的封装,通过按钮启动线程发送并接收

服务器代码(java版):

技术分享
import java.io.*;
import java.net.*;

/*
需求:定义端点接收数据并打印在控制台

服务端:
1.创建服务端serversocket对象并指定端口
  当不指定时,使用connect方法指定
2. 获取连接过来的客户端对象
   通过serversocket的accept方法等待,阻塞式,无连接一直等待
3.客户端如果发过来数据,服务端使用对应连接的读取流获取发过来数据
  打印在服务台
4,关闭服务端(可选)
*/

 class tcpServer
{
    public static void main(String[] args) throws IOException{
    
     //建立服务端socket服务,并监听端口
     ServerSocket ss =new ServerSocket(30000);
// 采用循环不断接受来自客户端的请求
 while (true)
 {
     //通过accept方法获取链接过来的客户端对象(s中有内容,端口,IP属性)
     Socket s = ss.accept();
     /*接收手机数据*/
     //IP:
     String ip =s.getInetAddress().getHostAddress();
     System.out.println(ip+"...连接成功" );
     //内容:获取客户端发送过来的数据,那么要使用客户端对象s
     InputStream in = s.getInputStream();

     byte[] buf =new byte[1024];
     int len=in.read(buf);
     String content = new String(buf,0,len);
     System.out.println("内容:"+content );
    /*回发给手机数据*/
     OutputStream os = s.getOutputStream();
            os.write("欢迎回来学安卓,您收到了泡泡的祝福!\n"
                .getBytes("utf-8"));
     //s.close();//关闭客户端,服务器可以控制客户
     //ss.close();//关闭服务端,可选操作
}
}
}
tcpServer.java

安卓代码(安卓版):

后台代码:

技术分享
package com.simpleclient;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
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 {

     private EditText mEditText = null;  
     private TextView mTextView = null;  
     private Button mButton = null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        mButton = (Button)findViewById(R.id.mButton);  
        mEditText = (EditText)findViewById(R.id.mEditText);  
        mTextView = (TextView)findViewById(R.id.mTextView); 
        mButton.setOnClickListener(new StartSocketListener());
    }
    //启动按钮监听
    class StartSocketListener implements OnClickListener{
          @Override
          public void onClick(View v) {
            new ServerThread().start();
          } 
        }
       
    class ServerThread extends Thread{
        // TCP 协议
        @Override
        public void run()
        {
            Socket socket=null;
            try
            {
                /* 指定Server的IP地址,此地址为局域网地址,如果是使用WIFI上网,则为PC机的WIFI IP地址 
                 * 在ipconfig查看到的IP地址如下: 
                 * Ethernet adapter 无线网络连接: 
                 * Connection-specific DNS Suffix  . : IP Address. . . . . . . . . . . . : 192.168.1.100 
                 */  
                // 1建立连接到远程服务器的Socket
                 socket = new Socket("192.168.1.108" , 30000);  //
                Log.d("TCP", "C: Connecting..."); 
                
            
                //2向服务端发送数据  
                BufferedWriter bufwriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
                // 把用户输入的内容发送给server  
                String lineWrite = mEditText.getText().toString(); 
                Log.d("TCP", "C: Sending: ‘" + lineWrite + "‘");
                bufwriter.write(lineWrite);//向服务端发送数据  
                bufwriter.newLine();  
                bufwriter.flush(); 
               //3接收服务器信息   
               // 将Socket对应的输入流包装成BufferedReader
                BufferedReader br = new BufferedReader(
                    new InputStreamReader(socket.getInputStream()));
                // 进行普通IO操作,得到服务器信息
                String line = br.readLine();
                mTextView.setText("读取到自服务器的数据:" + line);
                
                // 关闭输入流、socket
                br.close();
                //socket.close();
            }
            catch(UnknownHostException e) {  
                Log.e("TCP errror", "192.168.1.108 is unkown server!");  
            } catch(Exception e) {  
                e.printStackTrace();  
            } finally {  
                try {  
                    socket.close();  
                } catch(Exception e) {  
                    e.printStackTrace();  
                }  
            }  
        }
    }


}
MainActivity.java

前台代码:

技术分享
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<!-- 获取输入框信息并发送出去 -->
    <EditText
        android:id="@+id/mEditText"
        android:layout_width="fill_parent"
        android:layout_height="40dp"
        android:cursorVisible="false"
        android:editable="true" 
        
        android:ems="10" >
    </EditText>
     <TextView
        android:id="@+id/mTextView"
        android:layout_width="fill_parent"
        android:layout_height="50dp"
        
        android:ems="10" >

    </TextView>
    <Button
        android:id="@+id/mButton"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="TCP客户端---发送" />

</LinearLayout>
activity_main.xml

权限代码:

技术分享
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.simpleclient"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="19" />
    <uses-permission android:name="android.permission.INTERNET"/>

    <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>
use_permisson

效果:

技术分享

问题:乱码问题还没有解决掉~

安卓TCP通信版本2

标签:

原文地址:http://www.cnblogs.com/shuqingstudy/p/4964057.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!