===什么是 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(服务端)通信
本文深入探讨了Socket传输模式的概念,包括面向连接和无连接两种模式,并详细介绍了Socket的构造和使用方法,通过实例展示了如何在Java中实现双向连接的客户端和服务端通信。
751

被折叠的 条评论
为什么被折叠?



