一对一socket应用,单线程应用。
客户端:
package socket.demo2;
import java.io.*;
import java.net.Socket;
public class Client {
public static void main(String[] args) {
try {
Socket socket = new Socket("127.0.0.1", 8899);
/**
* 输入流:将存储设备中的内容读到内存中
* 输出流:将内存中内容写入到存储设备中
*
* 文件(存储设备)--(输入流)-->程序(内存)--(输出流)-->文件
*/
/**
* 字节流:以字节为单位,可以读到所有数据
* 字节输入流:InputStream
* 字节输出流:OutputStream
*/
/**
* 1.从服务器端发送数据写入到程序(内存)中 ,连接成功后,服务器端发送的数据都能接收到
*/
/**
* 字节输入流
*/
InputStream inputStream = socket.getInputStream();
/**
* 字符流:以字符为单位,只能读写文本数据
* 字符输入流:Reader
* 字符输出流: Writer
*/
/**
* 字符输入流
*/
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
/**
* 缓冲流:提高io效率,减少访问磁盘次数
* 数据存储在缓冲区中,flush是将缓冲区数据写入文件或读到内存中,刷新缓冲区,close是关闭缓冲区
*/
/**
* 缓冲输入流
*/
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
/**
* 2.将客户端信息反馈到服务器端
*/
/**
* 字符输出流
*/
OutputStream outputStream = socket.getOutputStream();
/**
* 缓冲输出流
*/
PrintWriter printWriter = new PrintWriter(outputStream);
/**
* 以上两个操作
* 字节流--(增强功能)-->字符流--(增强功能)-->缓冲流
*/
/**
* 键盘输入字符
*/
InputStreamReader inputStreamReader1 = new InputStreamReader(System.in);
BufferedReader bufferedReader1 = new BufferedReader(inputStreamReader1);
/**
* 缓冲流读键盘输入行,回车读结束
*/
String s = bufferedReader1.readLine();
while (!s.equals("exit")){
/**
* 打印键盘输入的字符
*/
printWriter.println(s);
/**
* 刷新缓冲流,推数据给服务器端
*/
printWriter.flush();
/**
* 读服务器端键盘输入字符
*/
System.out.println("client发送消息:"+s);
System.out.println("server发送消息:"+bufferedReader.readLine());
/**
* 键盘重新输入,重新发送给服务器端
*/
s=bufferedReader1.readLine();
}
/**
* 程序结束,释放资源
*/
bufferedReader1.close();
printWriter.close();
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
服务器端:
package socket.demo2;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) {
try {
ServerSocket serverSocket = new ServerSocket(8899);
Socket accept = serverSocket.accept();
InputStream inputStream = accept.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
OutputStream outputStream = accept.getOutputStream();
PrintWriter printWriter = new PrintWriter(outputStream);
InputStreamReader inputStreamReader1 = new InputStreamReader(System.in);
BufferedReader bufferedReader1 = new BufferedReader(inputStreamReader1);
String s = bufferedReader1.readLine();
while (!s.equals("exit")){
printWriter.println(s);
printWriter.flush();
System.out.println("server发送消息:"+s);
System.out.println("Clent发送消息:"+bufferedReader.readLine());
s=bufferedReader1.readLine();
}
bufferedReader1.close();
printWriter.close();
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}