手记

Java Socket_Client对Server说"我爱你"(上); 2016/9/15

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();
        }

    }
}
2人推荐
随时随地看视频
慕课网APP