网络通信
2016-03-02 13:43
507 查看
掌握使用异步任务进行网络通信,让应用在网络世界更加灵活自如
2.多线程的概念。
3.AsyncTask的使用方法。
包括传入参数、设定后台任务、过程信息的处理等
1.Http的Get与Post方式与服务器通信。
2.使用HttpClient进行Get或Post通信。
Socket通信是网络通信中最常用的技术之一,通过Socket建立的可靠连接,可以让多个终端与服务器保持通信,最典型的应用是建立一个多人聊天程序。
1.Socket链接建立的过程
服务器监听
客户端发出请求
建立连接
通信
2.Socket特点
Socket基于Tcp连接,数据传输有保障
Socket适用于建立长时间的连接
Socket编程通常应于即时通讯
3.创建ServerSocket服务器。
ChatManager.java
package com.gst.user.myapplication;
import java.util.Vector;
/**
* 项目名称:My Application
* 类描述:
* 创建人:user
* 创建时间:3/2/16 9:41 AM
* 修改人:user
* 修改时间:3/2/16 9:41 AM
* 修改备注:
*/
public class ChatManager {
private static ChatManager chatManager=new ChatManager();
private Vector<MutiTouchActivity.ChatScoket> chatScokets=new Vector<>();
private ChatManager() {
}
public static ChatManager getChatManager(){
return chatManager;
}
public void add(MutiTouchActivity.ChatScoket chatScoket){
chatScokets.add(chatScoket);
}
public void publish(MutiTouchActivity.ChatScoket chatScoket,String out){
for (int i = 0; i < chatScokets.size(); i++) {
MutiTouchActivity.ChatScoket temp=chatScokets.get(i);
if (!chatScoket.equals(temp)){
temp.out(out);
}
}
}
安卓服务器
package com.gst.user.myapplication;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import com.lidroid.xutils.util.LogUtils;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class MutiTouchActivity extends AppCompatActivity {
String[] strings=new String[]{"Spring","Summer","Autumn","winter"};
int index=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_muti_touch);
new ServerListener().start();
}
class ServerListener extends Thread{
@Override
public void run() {
//port 1-65535
try {
ServerSocket serverSocket=new ServerSocket(12345);
while (true){
Socket socket=serverSocket.accept();
LogUtils.i("有客户端连接到本机的12345端口");
//聊天线程
ChatScoket chatScoket=new ChatScoket(strings[index++],socket);
chatScoket.start();
//加入管理
ChatManager.getChatManager().add(chatScoket);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
4000
class ChatScoket extends Thread{
String name;
Socket socket;
public String getChatName() {
return name;
}
public ChatScoket(String name, Socket socket) {
this.name = name;
this.socket = socket;
}
@Override
public void run() {
/* try {
*//*
OutputStream outputStream=socket.getOutputStream();
OutputStreamWriter outputStreamWriter=new OutputStreamWriter(outputStream);
BufferedWriter writer=new BufferedWriter(outputStreamWriter);
*//*
int count=1;
while (true){
out("loop"+(count++)+"\n");
sleep(1000);
}
} catch (InterruptedException e) {
e.printStackTrace();
}*/
try {
BufferedReader reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line=null;
while ((line=reader.readLine())!=null){
ChatManager.getChatManager().publish(this,getChatName()+":"+line+"\n");
}
} catch (IOException e) {
e.printStackTrace();
}
}
public void out(String s){
try {
socket.getOutputStream() .write(s.getBytes());
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
4.客户端使用Socket与服务器通信。
一.Android异步任务处理
1.读写网络数据、大量计算等,为了不让这些耗时的任务影响界面响应,就应当使用异步任务进行处理。2.多线程的概念。
3.AsyncTask的使用方法。
包括传入参数、设定后台任务、过程信息的处理等
package com.gst.user.myapplication; import android.media.MediaPlayer; import android.os.AsyncTask; import android.os.Bundle; import android.os.Environment; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.View; import android.widget.TextView; import com.lidroid.xutils.util.LogUtils; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; public class FileActivity extends AppCompatActivity { TextView textView; String url; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_file); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) .setAction("Action", null).show(); } }); textView =(TextView)findViewById(R.id.textView2); url="https://www.baidu.com"; } public void read(View view){ new ReadURLTask().execute(url); } class ReadURLTask extends AsyncTask<String,Integer,String>{ @Override protected String doInBackground(String... params) { try { URL url=new URL(params[0]); URLConnection connection=url.openConnection(); InputStream inputStream=connection.getInputStream(); InputStreamReader inputStreamReader=new InputStreamReader(inputStream); BufferedReader reader=new BufferedReader(inputStreamReader); String line; StringBuffer stringBuffer=new StringBuffer(); while ((line=reader.readLine())!=null){ stringBuffer.append(line); // publishProgress(stringBuffer.toString().getBytes().length/total); } return stringBuffer.toString(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; } @Override protected void onProgressUpdate(Integer... values) { LogUtils.i(String.valueOf(values[0])); super.onProgressUpdate(values); } @Override protected void onPostExecute(String s) { textView.setText(s); super.onPostExecute(s); } } }
二.Android中基于HTTP的通信技术
作为移动平台的应用,一定避免不了与网络交换数据,不论是读取网页数据,还是调用API接口,都必须掌握Http通信技术。1.Http的Get与Post方式与服务器通信。
2.使用HttpClient进行Get或Post通信。
三.Android中基于Socket的网络通信
1.Socket通信的概念。Socket通信是网络通信中最常用的技术之一,通过Socket建立的可靠连接,可以让多个终端与服务器保持通信,最典型的应用是建立一个多人聊天程序。
1.Socket链接建立的过程
服务器监听
客户端发出请求
建立连接
通信
2.Socket特点
Socket基于Tcp连接,数据传输有保障
Socket适用于建立长时间的连接
Socket编程通常应于即时通讯
3.创建ServerSocket服务器。
ChatManager.java
package com.gst.user.myapplication;
import java.util.Vector;
/**
* 项目名称:My Application
* 类描述:
* 创建人:user
* 创建时间:3/2/16 9:41 AM
* 修改人:user
* 修改时间:3/2/16 9:41 AM
* 修改备注:
*/
public class ChatManager {
private static ChatManager chatManager=new ChatManager();
private Vector<MutiTouchActivity.ChatScoket> chatScokets=new Vector<>();
private ChatManager() {
}
public static ChatManager getChatManager(){
return chatManager;
}
public void add(MutiTouchActivity.ChatScoket chatScoket){
chatScokets.add(chatScoket);
}
public void publish(MutiTouchActivity.ChatScoket chatScoket,String out){
for (int i = 0; i < chatScokets.size(); i++) {
MutiTouchActivity.ChatScoket temp=chatScokets.get(i);
if (!chatScoket.equals(temp)){
temp.out(out);
}
}
}
安卓服务器
package com.gst.user.myapplication;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import com.lidroid.xutils.util.LogUtils;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class MutiTouchActivity extends AppCompatActivity {
String[] strings=new String[]{"Spring","Summer","Autumn","winter"};
int index=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_muti_touch);
new ServerListener().start();
}
class ServerListener extends Thread{
@Override
public void run() {
//port 1-65535
try {
ServerSocket serverSocket=new ServerSocket(12345);
while (true){
Socket socket=serverSocket.accept();
LogUtils.i("有客户端连接到本机的12345端口");
//聊天线程
ChatScoket chatScoket=new ChatScoket(strings[index++],socket);
chatScoket.start();
//加入管理
ChatManager.getChatManager().add(chatScoket);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
4000
class ChatScoket extends Thread{
String name;
Socket socket;
public String getChatName() {
return name;
}
public ChatScoket(String name, Socket socket) {
this.name = name;
this.socket = socket;
}
@Override
public void run() {
/* try {
*//*
OutputStream outputStream=socket.getOutputStream();
OutputStreamWriter outputStreamWriter=new OutputStreamWriter(outputStream);
BufferedWriter writer=new BufferedWriter(outputStreamWriter);
*//*
int count=1;
while (true){
out("loop"+(count++)+"\n");
sleep(1000);
}
} catch (InterruptedException e) {
e.printStackTrace();
}*/
try {
BufferedReader reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line=null;
while ((line=reader.readLine())!=null){
ChatManager.getChatManager().publish(this,getChatName()+":"+line+"\n");
}
} catch (IOException e) {
e.printStackTrace();
}
}
public void out(String s){
try {
socket.getOutputStream() .write(s.getBytes());
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
4.客户端使用Socket与服务器通信。
相关文章推荐
- Linux tcpdump 命令详解
- HTTPS科普扫盲帖
- iOS网络开发(3)使用NSURLSession
- HttpContext.Current并非无处不在
- SCNetworkReachability与RealReachability示例整理
- http post请求
- 机会网络路由协议学习之MaxProp
- 用python实现BP神经网络
- tomcat 7.0.50 http 升级 websocket
- http get请求
- iOS网络开发(2)使用NSURLConnection
- HttpContext详解
- 什么是网络爬虫(Spider) 程序
- HttpServlet---getLastModified与缓存
- tcpdump的使用
- KVM 网络设置
- (转)几种开放源码的TCPIP协议栈概述
- TCP三次握手和四次挥手详解
- 如何更高效地使用 OkHttp
- iOS网络开发(1)写代码前需要了解的