现在的位置: 首页 > 综合 > 正文

Android/Socket编程 简单C/S模式

2018年05月26日 ⁄ 综合 ⁄ 共 1275字 ⁄ 字号 评论关闭

===什么是 Socket ? 

Socket传输模式:  1. 面向连接   2. 无连接(还没研究,这里不提了) 

面向连接使用TCP协议, 这个模式下Socket必须在发送数据之前与目的地Socket取得连接。

建立连接后,既可使用流接口 进行对于的打开,读,写,关闭操作。并且发送数据的顺序,

与接收的顺序保持一致。

见下图:


===Socket构造

在包java.net中提供了两个类:Socket,ServerSocket分别表示双向连接的客户端和服务端。

新建ServerSocket对象,并绑定监听端口

(如上图TCP服务器端0-2步)

void setupServerSocket() throws IOException {
		serverSocket = new ServerSocket();
		serverSocket.setReuseAddress(true);
		// 监听的端口 范围 [1024,65535)
		serverSocket.bind(new InetSocketAddress(port));
	}

阻塞等待客户端发起连接(accept)

				// 阻塞程序 等待客户端连接
				Socket cmdClientSocket = serverSocket.accept();
				// 新起线程去处理cmdClientSocket发来的请求
				// 因为服务端对应客户端可能是 1:0~n
				SessionThreadThread newSession = new SessionThreadThread(
						cmdClientSocket);
				newSession.start();
				// 将线程注册到统一地点 便于管理
				// 这里使用的List管理这些线程
				ftpServerService.registerSessionThread(newSession);

读取客户端传来的数据(read)

BufferedReader in = new BufferedReader(new InputStreamReader(
					cmdClientSocket.getInputStream()), 8192); // use 8k buffer
			while (true) {
				String line = null;
				line = in.readLine();
				if (line != null) {
					// TODO: 
				} else {
					break;
				}
			}

服务端写操作传回客户端(write)

BufferedOutputStream out = new BufferedOutputStream(
					cmdClientSocket.getOutputStream(), Defaults.dataChunkSize);
			out.write(bytes);
			out.flush();

关闭操作(close)

serverSocket.close();
cmdClientSocket.close();

综上ServerSocket会阻塞自身,直接accept()方法得到一个clientSocket,然后操作clientSocket,与客户端的Socket进行通讯。这点在上图中能很好的体现。附上: Wifi下 Android(客户端)与PC(服务端)通信

抱歉!评论已关闭.