采用字符流实现通信
客户端:
package src.com.zhang.socket;
import java.io.BufferedWriter;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.nio.charset.StandardCharsets;
public class SocketTcp03Client {
public static void main(String[] args) throws Exception{
//1.连接服务器(ip,端口)
//解读:连接本机的9999端口,如果连接成功,返回Socket对象
Socket socket = new Socket(InetAddress.getLocalHost(), 9999);
System.out.println("客户端返回"+Socket.class);
//2.连接上后,通过Socket.getOutputSream()得到和Socket关联的输出流对象
OutputStream outputStream=socket.getOutputStream();
//3.通过输出流写入数据到 数据通道,使用字符流
// outputStream.write("hello,server".getBytes(StandardCharsets.UTF_8));
BufferedWriter bufferedWriter=new BufferedWriter(new OutputStreamWriter(outputStream));
bufferedWriter.write("hello server");
//插入一个换行符,表示写入的内容结束,但是接收方也需要使用readline来接受数据
bufferedWriter.newLine();//
//如果使用的是字符流,需要手动刷新一下,否则数据不会进入数据通道
bufferedWriter.flush();
//4.获取和Socket关联的输入流,读取字节流,并显示
InputStream inputStream=socket.getInputStream();
byte[] bytes=new byte[1024];
int len=0;
while ((len=inputStream.read(bytes))!=-1){
System.out.println(new String(bytes,0,len));
}
//必须关闭流和Socket
outputStream.close();
socket.close();
}
}
服务端:
package src.com.zhang.socket;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.charset.StandardCharsets;
public class SocketTcpServer03 {
public static void main(String[] args) throws Exception{
//在本机的9999端口监听,等待连接
//PS:serverSocket.accept()可以接受多个客户端的并发请求
ServerSocket serverSocket=new ServerSocket(9999);
System.out.println("服务端,正在等待连接..");
//当没有程序连接9999端口,程序会阻塞,等待连接
Socket socket=serverSocket.accept();
//如果有客户端连接,则会返回Socket对象,程序继续
System.out.println("服务端"+socket.getClass());
//通过getInputStream()获取输入通道的数据
InputStream inputStream=socket.getInputStream();
//4.IO读取
// byte[] buf=new byte[1024];
// int readlen=0;
// while ((readlen=inputStream.read(buf))!=-1){
// System.out.println(new String(buf,0,readlen));
// }
BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(inputStream));
String line = bufferedReader.readLine();
System.out.println(line);
//5.获取Socket相关联的输出流
OutputStream outputStream=socket.getOutputStream();
// outputStream.write("hello client".getBytes(StandardCharsets.UTF_8));
// socket.shutdownOutput();
BufferedWriter bufferedWriter=new BufferedWriter(new OutputStreamWriter(outputStream));
bufferedWriter.write("hello Client");
bufferedWriter.newLine();
bufferedWriter.flush();
//6.关闭流和Socket
inputStream.close();
socket.close();
serverSocket.close();
}
}