安卓TCP通信版本2
生活随笔
收集整理的這篇文章主要介紹了
安卓TCP通信版本2
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
PC做服務(wù)器,安卓做客戶端。
安卓獲取輸入框的內(nèi)容并發(fā)送,然后等待接收服務(wù)器的消息
服務(wù)器先行開啟,接收到客戶端的數(shù)據(jù),然后回復(fù)消息。
?
實(shí)現(xiàn)了對線程類的封裝,通過按鈕啟動(dòng)線程發(fā)送并接收
服務(wù)器代碼(java版):
import java.io.*; import java.net.*;/* 需求:定義端點(diǎn)接收數(shù)據(jù)并打印在控制臺(tái)服務(wù)端: 1.創(chuàng)建服務(wù)端serversocket對象并指定端口當(dāng)不指定時(shí),使用connect方法指定 2. 獲取連接過來的客戶端對象通過serversocket的accept方法等待,阻塞式,無連接一直等待 3.客戶端如果發(fā)過來數(shù)據(jù),服務(wù)端使用對應(yīng)連接的讀取流獲取發(fā)過來數(shù)據(jù)打印在服務(wù)臺(tái) 4,關(guān)閉服務(wù)端(可選) */class tcpServer {public static void main(String[] args) throws IOException{//建立服務(wù)端socket服務(wù),并監(jiān)聽端口ServerSocket ss =new ServerSocket(30000); // 采用循環(huán)不斷接受來自客戶端的請求while (true){//通過accept方法獲取鏈接過來的客戶端對象(s中有內(nèi)容,端口,IP屬性)Socket s = ss.accept();/*接收手機(jī)數(shù)據(jù)*///IP:String ip =s.getInetAddress().getHostAddress();System.out.println(ip+"...連接成功" );//內(nèi)容:獲取客戶端發(fā)送過來的數(shù)據(jù),那么要使用客戶端對象sInputStream in = s.getInputStream();byte[] buf =new byte[1024];int len=in.read(buf);String content = new String(buf,0,len);System.out.println("內(nèi)容:"+content );/*回發(fā)給手機(jī)數(shù)據(jù)*/OutputStream os = s.getOutputStream();os.write("歡迎回來學(xué)安卓,您收到了泡泡的祝福!\n".getBytes("utf-8"));//s.close();//關(guān)閉客戶端,服務(wù)器可以控制客戶//ss.close();//關(guān)閉服務(wù)端,可選操作 } } } tcpServer.java安卓代碼(安卓版):
后臺(tái)代碼:
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());}//啟動(dòng)按鈕監(jiān)聽class StartSocketListener implements OnClickListener{@Overridepublic void onClick(View v) {new ServerThread().start();} }class ServerThread extends Thread{// TCP 協(xié)議 @Overridepublic void run(){Socket socket=null;try{/* 指定Server的IP地址,此地址為局域網(wǎng)地址,如果是使用WIFI上網(wǎng),則為PC機(jī)的WIFI IP地址 * 在ipconfig查看到的IP地址如下: * Ethernet adapter 無線網(wǎng)絡(luò)連接: * Connection-specific DNS Suffix . : IP Address. . . . . . . . . . . . : 192.168.1.100 */ // 1建立連接到遠(yuǎn)程服務(wù)器的Socketsocket = new Socket("192.168.1.108" , 30000); //①Log.d("TCP", "C: Connecting..."); //2向服務(wù)端發(fā)送數(shù)據(jù) BufferedWriter bufwriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));// 把用戶輸入的內(nèi)容發(fā)送給server String lineWrite = mEditText.getText().toString(); Log.d("TCP", "C: Sending: '" + lineWrite + "'");bufwriter.write(lineWrite);//向服務(wù)端發(fā)送數(shù)據(jù) bufwriter.newLine(); bufwriter.flush(); //3接收服務(wù)器信息 // 將Socket對應(yīng)的輸入流包裝成BufferedReaderBufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));// 進(jìn)行普通IO操作,得到服務(wù)器信息String line = br.readLine();mTextView.setText("讀取到自服務(wù)器的數(shù)據(jù):" + line);// 關(guān)閉輸入流、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前臺(tái)代碼:
<?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"> <!-- 獲取輸入框信息并發(fā)送出去 --><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客戶端---發(fā)送" /></LinearLayout> activity_main.xml權(quán)限代碼:
<?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> use_permisson效果:
問題:亂碼問題還沒有解決掉~
轉(zhuǎn)載于:https://www.cnblogs.com/shuqingstudy/p/4964057.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的安卓TCP通信版本2的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WPF笔记(1.1 WPF基础)——He
- 下一篇: oracle 删除表中重复记录,并保留一