服务端代码:
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