首页 > 代码库 > Android Socket编程学习笔记
Android Socket编程学习笔记
通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。
网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket。Socket通常用来实现客户方和服务方的连接。Socket是TCP/IP协议的一个十分流行的编程界面,一个Socket由一个IP地址和一个端口号唯一确定。
在java中,Socket和ServerSocket类库位于java .net包中。ServerSocket用于服务器端,Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。
下面通过一个极为简单的客户端和服务端的连接例子演示下最基本的android socket通信:
服务端的代码,在服务端特定的端口9999监听客户端请求,一旦有请求,便会执行,而后继续监听。使用accept()这个阻塞函数,就是该方法被调用后一直等待客户端的请求,直到有请求且连接到同一个端口,accept()返回一个对应于客户端的Socket。本例中很简单,服务端不断监听,一旦有请求就输出一段信息:
- <font color="#000"><font face="Arial"><span style="font-family:Comic Sans MS;font-size:18px;">import java.io.BufferedWriter;
- import java.io.IOException;
- import java.io.OutputStreamWriter;
- import java.net.ServerSocket;
- import java.net.Socket;
- public class Main {
- private static final int PORT = 9999;
- public static void main(String[] args) {
- try {
- // 实例化服务器套接字 设置端口号9999
- ServerSocket server = new ServerSocket(PORT);
- while (true) {
- Socket socket = server.accept();
- // 获取输出流
- BufferedWriter writer = new BufferedWriter(
- new OutputStreamWriter(socket.getOutputStream()));
- // 写字符串
- writer.write("这是一段来自服务器的问候:Hello沃德!");
- writer.flush();
- writer.close();
- }
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
- </span></font></font>
- <font color="#000"><font face="Arial"><span style="font-family:Comic Sans MS;font-size:18px;">package com.example.socketdemo;
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.net.Socket;
- import java.net.UnknownHostException;
- import android.annotation.SuppressLint;
- import android.app.Activity;
- import android.os.Bundle;
- import android.os.Handler;
- import android.os.Message;
- import android.util.Log;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- import android.widget.TextView;
- @SuppressLint("HandlerLeak")
- public class SocketDemo extends Activity {
- /** Called when the activity is first created. */
- private Button btn_receive;
- private TextView txt;
- private String line;
-
- private static final String HOST = "192.168.1.101";
- private static final int PORT = 9999;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- initControl();
- }
- private void initControl() {
- btn_receive = (Button) findViewById(R.id.btn_receive);
- txt = (TextView) findViewById(R.id.txt);
- btn_receive.setOnClickListener(new ReceiverListener());
- }
-
- @SuppressLint("HandlerLeak")
- class ReceiverListener implements OnClickListener {
- @Override
- public void onClick(View v) {
- // TODO Auto-generated method stub
- new Thread() {
- @Override
- public void run() {
- // 执行完毕后给handler发送一个空消息
- try {
- // 实例化Socket
- Socket socket = new Socket(HOST, PORT);
- // 获得输入流
- BufferedReader br = new BufferedReader(
- new InputStreamReader(socket.getInputStream()));
- line = br.readLine();
- br.close();
- } catch (UnknownHostException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- handler.sendEmptyMessage(0);
- }
- }.start();
- }
- }
- // 定义Handler对象
- private Handler handler = new Handler() {
- @Override
- // 当有消息发送出来的时候就执行Handler的这个方法
- public void handleMessage(Message msg) {
- super.handleMessage(msg);
- // 处理UI
- txt.setText(line);
- Log.i("PDA", "----->" + line);
- }
- };
- }
- </span></font></font>
另外在配置文件中记得加上权限:<uses-permission android:name="android.permission.INTERNET">
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。