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

本文深入探讨了Socket传输模式的概念,包括面向连接和无连接两种模式,并详细介绍了Socket的构造和使用方法,通过实例展示了如何在Java中实现双向连接的客户端和服务端通信。

===什么是 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(服务端)通信
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值