大二的悲催期末考试结束了,暑假要认真学点儿技术了。学习了技术不用的话很快就会忘,还是记下来加深下印象。
Socket 编程是比较底层的网络编程方式,其他高级的通信协议都是建立在此基础上的,所以在学习android网络通信之前先了解下Socket编程。
Socket编程中,Socket用来建立客户端程序,ServerSocket在服务端建立一个新的监听的端口,用来监听客服端Socket的连接,当监听到连接后,ServerSocket就获得一个Socket的实例,打开输入输出流进行通信。
先在myeclipse建立一个服务器的项目,新建一个java类MyServer,监听android客户端Socket的连接。ServerSocket监听的是8087的端口号。
package com.test;
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class MyServer {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try{
//实例化服务器的套接字
ServerSocket socket= new ServerSocket(8087);
while(true){
//监听获得客户端的套接字
Socket client = socket.accept();
//获得输出流
OutputStream out= client.getOutputStream();
String msg="got it....";
out.write(msg.getBytes());
client.close();
}
}catch (IOException e){
e.printStackTrace();
}
}
}
然后建立android客户端的程序,布局文件中只有TextView用来显示接受到的“got it...”
<?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"
android:background="#ffffff"
>
<TextView
android:id="@+id/text"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="#000000"
android:textSize="30dp"
/>
</LinearLayout>
客户端程序,建立socket连接接受服务器信息并通过TextView显示。
package com.test;
import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
/**
* @author liguiwu
*
*/
public class ClientActivity extends Activity {
private TextView text;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
text=(TextView) findViewById(R.id.text);
try{
Socket socket= new Socket("192.168.1.101",8087);
InputStream in = socket.getInputStream();
byte[] buffer =new byte[in.available()];
in.read(buffer);
String msg= new String(buffer);
text.setText(msg);
}catch (UnknownHostException e) {
// TODO: handle exception
e.printStackTrace();
}catch (IOException e) {
// TODO: handle exception
}
}
}
运行后结果,模拟器上测试成功,真机上没有成功。