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+"...連接成功" );//內容:獲取客戶端發送過來的數據,那么要使用客戶端對象sInputStream 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();//關閉服務端,可選操作 } } }
安卓代碼(安卓版):
后臺代碼:


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;@Overrideprotected 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{@Overridepublic void onClick(View v) {new ServerThread().start();} }class ServerThread extends Thread{// TCP 協議 @Overridepublic 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建立連接到遠程服務器的Socketsocket = 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對應的輸入流包裝成BufferedReaderBufferedReader 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(); } } }}}
前臺代碼:


<?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"> <!-- 獲取輸入框信息并發送出去 --><EditTextandroid:id="@+id/mEditText"android:layout_width="fill_parent"android:layout_height="40dp"android:cursorVisible="false"android:editable="true" android:ems="10" ></EditText><TextViewandroid:id="@+id/mTextView"android:layout_width="fill_parent"android:layout_height="50dp"android:ems="10" ></TextView><Buttonandroid:id="@+id/mButton"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="TCP客戶端---發送" /></LinearLayout>
權限代碼:


<?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-sdkandroid:minSdkVersion="14"android:targetSdkVersion="19" /><uses-permission android:name="android.permission.INTERNET"/><applicationandroid:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" ><activityandroid: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>
效果:
問題:亂碼問題還沒有解決掉~