当两台电脑TCP/IP协议进行通信。平时Socket对象来表示该通讯接口的两端,并经过Socket生产I/O流进行网络通讯。html
其中ServerSocket对象能够接收从链接的其余通讯实体的请求。这个目的是用于侦听client的Socket链接。假设没有链接,它将一直处于等待状态。java
在本文中将建立一个server端的ServerSocket 和 手机client的Socket . 使它们创建链接。产生I/O流,在手机上显示获取的数据。android
终于获得的结果例如如下图所看到的。网络
首先建一个Java项目。用来建立ServerSocket. 代码例如如下app
import java.io.IOException; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; public class SimpleServer { public static void main(String[] args) throws IOException { //建立一个ServerSocket,用于监听clientSocket的链接请求 ServerSocket ss = new ServerSocket(30000); System.out.println("server端已准备接受请求"); //使用循环不断接收来自client的请求 while(true){ //每当接收到一个clientSocket的请求。server端也会相应产生一个Socket对象 Socket s = ss.accept(); OutputStream os = s.getOutputStream(); //输出字符串。并强行使用UTF-8字符集进行编码 os.write("您好。您收到了server的新年祝福!\n".getBytes("utf-8")); //关闭输出流,关闭Socket os.close(); s.close(); } } } socket
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="${packageName}.${activityClass}" > <EditText android:id="@+id/show" android:layout_width="match_parent" android:layout_height="wrap_content" /> </RelativeLayout>
package com.wyb.simpleclient; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.Socket; import java.net.UnknownHostException; import android.app.Activity; import android.os.Bundle; import android.widget.EditText; public class MainActivity extends Activity { private EditText show; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); show = (EditText)findViewById(R.id.show); ///建立一个新线程来进行网络操做 new Thread(){ @Override public void run() { try { //创建链接到远程server的Socket Socket socket = new Socket("192.168.0.104",30000); //将Socket相应的输入流包装成BufferedReader BufferedReader br = new BufferedReader( new InputStreamReader(socket.getInputStream())); //进行普通的I/O操做 String line = br.readLine(); //在该线程中控制UI中的EditText控件显示内容 show.setText("来自server的数据: "+ line); //关闭流、socket br.close(); socket.close(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }.start(); } }
由于在本项目其中使用到了网络通讯。所以必定要再AndroidManifest.xml其中配置訪问互联网的权限。ide
<uses-permission android:name="android.permission.INTERNET"/>
所以,有必要在新的线程与网络相关的操做。用在本项目上的使用编码
new Thread() 要建立一个新的线程。 控制新的线程UI该 EditText 控制显示获得的内容。.net
可是,通常状况下。UI 在其余线程的控制是不可操做。除ProgressBar 和EditText 外(如今我知道) 线程