本文系作者原创,转载请附原文地址,谢谢。
前言:
关于什么是socket通信,本篇文档中不进行解释,不甚清楚的可以去百科查找,日后得空我也会整理相关的内容。
本文是对上一篇关于消息推送的文章的补充,此处给出快速链接:http://blog.csdn.net/a774057695/article/details/47024887
本篇书写的目的:
1. 让android客户端和服务器端实现socket通信,且demo需实现双向
2. 为实现服务器向客户端推送消息奠定基础
特别说明:
1. 服务器端利用pc机运行apach服务器模拟
2. Pc集成xampp环境
3. 服务器端eclipse编译,java实现
4. 客户端使用真机调试(使用模拟器需要对源码进行修改,因为没有尝试,所以没有给出示例代码,使用模拟器调试出错的请留意该点)
5. 手机和pc加入同一域,至少连入同一台路由器,使用wifi共享的方法本文不提供技术支持、不保证其可行性。
功能概述:
l 服务器端:
主函数实现:阻塞的代码段等待socket连接、启动线程为socket连接提供应答;
互动线程(暂且这样称呼):实现收到客户端消息后进行反馈
单向线程(暂且这样称呼):实现接受控制台输入并向客户端发送
连接断开删去该条socket
l 客户端:
实现向服务器端建立socket连接
启动线程监听服务器发送的消息、并反馈UI显示
将本地消息发往服务器
代码结构:
服务器端:(主要)
|-- MyServer
|--src
|--[package]
|--MyServer.java
|--ServerThread.java
|--Thread2.java
客户端:(主要)
|--MultiThreadClient
|--src
|--[package]
|--ClientThread.java
|--MainActivity.java
|--res
|--layout
|--activity_main.xml
|--AndroidManifest.xml
代码示例及关键点:
l 服务器端:
MyServer.java
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
public class MyServer {
//定义保存所有Socket的ArrayList
public static ArrayList<Socket> socketList = new ArrayList<Socket>();
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// param 端口号
ServerSocket ss = new ServerSocket(30000);
while(true){
//此代码会阻塞,将一直等待别人连接
Socket s = ss.accept();
socketList.add(s);
/*每当客户端连接后启动一条ServerThread线程为该客户端服务*/
new Thread(new ServerThread(s)).start();
new Thread(new Thread2(s)).start();
}
}
}
此处我们需要留意的是端口号,第一不要去使用