服务端:2016/9/15 4:15PM; 这是一个关于 Socket的阶段总结
1. 创建一个服务器端的Socket, 即ServerSocket。创建时指定绑定的端口
注: 端口号在 1023之后;
2. 侦听ServerSocket, 用accept()方法; accept()返回Socket
3. 实现数据交互, 获取客户端的信息(获取输入流)
//获取 字节输入流
InputStream is = socket.getInputStream();
// 将字节流 转为字符流 (提高性能)
InputStreamReader isr = new InputStreamReader(is);
// 为字符流添加缓冲, 已缓冲的方式去读取...
BufferedReader br = new BufferedReader(isr);
// 获得提交的登陆信息
String info = null;
while( (info=br.readLine()) != null ) { // 数据不为空 则循环读取
System.out.println("我是服务器, 客户端说: " + info);
}
// 关闭输入流
socket.shutdownInput();
4. 关闭相关资源
br.close();
isr.close();
is.close();
socket.close();
serversocket.close();
全体代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
/*
* 基于TCP协议的 Socket通信, 实现用户登录
* Server: 服务器端
* */
public class Server {
public static void main(String[] args) {
try {
// 1. 创建一个服务端的 Socket, 即ServerSocket.
// 指定绑定的端口, 并侦听此端口
ServerSocket serversocket = new ServerSocket(8888);
// 2. 开始侦听ServerSocket, 用 accept()方法;
System.out.println("服务器启动, 等待连接....");
Socket socket = serversocket.accept();
// 3. 实现数据交互, 获取客户端的信息(获取输入流)
InputStream is = socket.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String info = null;
while( (info=br.readLine()) != null ) {
System.out.println("我是服务器, 客户端说: " + info);
}
// 关闭输入流
socket.shutdownInput();
// 4. 关闭相关资源
br.close();
isr.close();
is.close();
socket.close();
serversocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}