输入输出流
输入流:InputStream(字节流)、reader(字符流)
输出流:OutputStream(字节流)、writer(字符流)
字节流以8字节为单位,字符流以16字节为单位。
Socket套接字有两个重要的方法:
– getInputStream():返回socket对象对应的输入流。
– getOutputStream():返回socket对象对应的输出流。
BufferedReader(Reader in)
字符流缓冲区,该缓冲区提供了一个一次读一行的方法readline(),方便于对文本数据的获取,当返回null时,表示读到文件末尾。一般将字符读取流对象作为参数传递给缓冲对象的构造函数。
BufferedWriter(Reader in)
BufferedWriter bw= new BufferedWriter(new FileWriter(path));
line=bufferedReader.readLine();
bw.write(line);//表示将从缓冲区读取到的回车前的那一行(不含回车)写入到位置为path的文件内。
服务器和客户端通信
服务器代码:
import java.io.*;
import java.net.*;
public class Server {
public static void main(String[] args) throws IOException {
//创建一个服务器端socket,指定绑定的端口号,并监听此端口
ServerSocket serverSocket = new ServerSocket(8888);
//调用accept()方法开始监听,等待客户端的连接
System.out.println("**********服务器即将启动,等待客户端的连接*************");
Socket socket = serverSocket.accept();
//获取输入流,并读取客户端信息
InputStream inp = socket.getInputStream();
//把字节流转换成字符流
InputStreamReader isr = new InputStreamReader(inp);
//为字符流增加缓冲区
BufferedReader bfr = new BufferedReader(isr);
String info = null;
while((info=bfr.readLine())!=null){//循环读取数据
System.out.println("我是服务器,客户端说:"+info);
}
socket.shutdownInput();//关闭输入流
//向客户端传递的信息
OutputStream ots = socket.getOutputStream();
PrintWriter pw = new PrintWriter(ots);
pw.write("欢迎登陆");
pw.flush();
//关闭资源
pw.close();
ots.close();
bfr.close();
isr.close();
inp.close();
socket.close();
serverSocket.close();
}
}
客户端代码:
import java.io.*;
import java.net.*;
public class Client {
public static void main(String[] args) {
try {
//创建一个客户端socket
Socket socket = new Socket("localhost",8888);
//向服务器端传递信息
OutputStream ots = socket.getOutputStream();
PrintWriter pw = new PrintWriter(ots);
pw.write("用户名:admin;密码:123");
pw.flush();
//关闭输出流
socket.shutdownOutput();
//获取服务器端传递的数据
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);
}
//关闭资源
br.close();
isr.close();
is.close();
pw.close();
ots.close();
socket.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}