网络编程之BIO

服务端代码:

package com.itbac.BIO;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 服务器
 */
public class BIOServer {
    public static void main(String[] args) throws IOException {

        ServerSocket serverSocket = new ServerSocket(8080);
        System.out.println("服务器启动成功!");
        while (!serverSocket.isClosed()) {
            Socket request = serverSocket.accept(); //阻塞
            System.out.println("收到新连接:"+request.toString());
            try {
                //获取输入流
                InputStream inputStream = request.getInputStream(); //net 网络 + IO 输入输出流
                BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream,"utf-8"));
                String msg;
                while (null != (msg = reader.readLine())) {  //readLine
                    if (msg.length() == 0) {
                        break;
                    }
                    System.out.println(msg);
                }
                System.out.println("收到数据,来自:"+request.toString());
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    request.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        serverSocket.close();
    }
}

客户端代码:

package com.itbac.BIO;

import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.nio.charset.Charset;
import java.util.Scanner;

/**
 * 客户端
 */
public class BIOClient {
    //字符编码
    private static Charset charset = Charset.forName("UTF-8");

    public static void main(String[] args) throws IOException {
        //创建套接字                     (服务端的ip,端口)
        Socket socket = new Socket("localhost", 8080);
        //获取输出流
        OutputStream out = socket.getOutputStream();
        //键盘输入
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入:");
        //获取下一行,阻塞
        String msg = scanner.nextLine();
        //写出,阻塞
        out.write(msg.getBytes(charset));
        scanner.close();
        out.close();
    }
}

分别启动服务器,客户端,在客户端的控制台,键盘输入:12345

在服务端的控制台,看到以下输出:

服务器启动成功!
收到新连接:Socket[addr=/127.0.0.1,port=61238,localport=8080]
12345
收到数据,来自:Socket[addr=/127.0.0.1,port=61238,localport=8080]

信息解释:

服务器收到一个客户端连接,客户端地址addr ,客户端端口 port ,服务器的端口 localport  

猜你喜欢

转载自www.cnblogs.com/itbac/p/12002248.html