Android Socket编程学习笔记
2014-06-03 17:24
399 查看
http://www.oschina.net/question/565065_107972?sort=time
度娘给出的描述:
通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。
网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket。Socket通常用来实现客户方和服务方的连接。Socket是TCP/IP协议的一个十分流行的编程界面,一个Socket由一个IP地址和一个端口号唯一确定。
在java中,Socket和ServerSocket类库位于java .net包中。ServerSocket用于服务器端,Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。
下面通过一个极为简单的客户端和服务端的连接例子演示下最基本的android socket通信:
服务端的代码,在服务端特定的端口9999监听客户端请求,一旦有请求,便会执行,而后继续监听。使用accept()这个阻塞函数,就是该方法被调用后一直等待客户端的请求,直到有请求且连接到同一个端口,accept()返回一个对应于客户端的Socket。本例中很简单,服务端不断监听,一旦有请求就输出一段信息:
源码打印?
<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>
下面是android客户端的相关内容,界面有一个按钮,点击后请求服务端的制定端口,然后显示服务端的内容,值得注意的是在android4.0以上的系统中,是不允许在主线程里面去执行网络相关的请求,否则会报错:NetworkOnMainThreadException,所以本例中新开辟一个线程初始化socket的内容:
源码打印?
<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>
效果图如下:
另外在配置文件中记得加上权限:<uses-permission android:name="android.permission.INTERNET">
测试的时候先启动服务端,然后启动客户端,点击按钮就可获取到服务端信息。这是在是一个灰常简单的有关android socket的小例子,可以初步对socket有个简单的了解,这个笔记就先记到这里!
参考文章:
http://blog.sina.com.cn/s/blog_685790700100xjuo.html
/article/4799089.html
原文链接:/article/7776805.html
度娘给出的描述:
通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。
网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket。Socket通常用来实现客户方和服务方的连接。Socket是TCP/IP协议的一个十分流行的编程界面,一个Socket由一个IP地址和一个端口号唯一确定。
在java中,Socket和ServerSocket类库位于java .net包中。ServerSocket用于服务器端,Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。
下面通过一个极为简单的客户端和服务端的连接例子演示下最基本的android socket通信:
服务端的代码,在服务端特定的端口9999监听客户端请求,一旦有请求,便会执行,而后继续监听。使用accept()这个阻塞函数,就是该方法被调用后一直等待客户端的请求,直到有请求且连接到同一个端口,accept()返回一个对应于客户端的Socket。本例中很简单,服务端不断监听,一旦有请求就输出一段信息:
源码打印?
<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>
下面是android客户端的相关内容,界面有一个按钮,点击后请求服务端的制定端口,然后显示服务端的内容,值得注意的是在android4.0以上的系统中,是不允许在主线程里面去执行网络相关的请求,否则会报错:NetworkOnMainThreadException,所以本例中新开辟一个线程初始化socket的内容:
源码打印?
<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>
效果图如下:
另外在配置文件中记得加上权限:<uses-permission android:name="android.permission.INTERNET">
测试的时候先启动服务端,然后启动客户端,点击按钮就可获取到服务端信息。这是在是一个灰常简单的有关android socket的小例子,可以初步对socket有个简单的了解,这个笔记就先记到这里!
参考文章:
http://blog.sina.com.cn/s/blog_685790700100xjuo.html
/article/4799089.html
原文链接:/article/7776805.html
相关文章推荐
- Socket 编程 -- MarsChen Android 教程学习笔记
- Android Socket编程学习笔记
- Android 学习笔记 - 【Socket编程】
- 网络编程学习笔记(一)-----socket
- 学习笔记之SOCKET网络编程之二
- Android 学习笔记5:GUI编程
- 黑马程序员_学习笔记:15) 网络编程:Socket(udp、tcp)
- TCP/IP socket 编程 学习笔记
- Android 学习 笔记_10. Socket 编程
- 学习笔记(10) : Socket 编程典型代码积累
- Python学习笔记--网络编程, socket
- JAVA socket编程学习笔记
- Android编程学习:http + socket 通信例程
- 蓝牙协议学习笔记(2)-android 编程api
- [零散篇]Java学习笔记---Java的Socket网络编程以及多线程
- 快速学习Android蓝牙编程---- 学习笔记
- Android开发学习笔记(八)Android应用界面编程 ImageView学习
- Android开发学习笔记(九)Android应用界面编程 AutoCompleteTextView学习
- Python学习笔记(4)-- 网络编程(1)-- socket
- Android笔记之Socket编程