//(客户端类)
class Client:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
public class Client {
public static void main(String[] args) {
try {
//创建套接字;(作为客户端的水管头)连接服务器;
Socket s = new Socket("127.0.0.1", 50000);
Scanner sca = new Scanner(System.in);
//转换专用,将捕获的字节流转换为字符流(字节可以打包转字符,字符不能拆散转字节,可用强制转换失精度来理解)
OutputStreamWriter os = new OutputStreamWriter(s.getOutputStream());
//创建自符流对象来存取转换的字符流(容器)
PrintWriter pw = new PrintWriter(os);
//同上,转换专用,将要输入的字节流转换为字符流(扔进水管前打个包)
InputStreamReader is = new InputStreamReader(s.getInputStream());
//创建字符流,存放字符流
BufferedReader br = new BufferedReader(is);
//持续循环
while(true){
//创建 String 存放 br 读到的值
String str2 = br.readLine();
System.out.println("收到:"+str2);
System.out.print("(客户端)请输入内容:");
String str = sca.nextLine();
//写入文件(将要发送的 str 扔进水管)
pw.println(str);
//由于发送的是字符流,需要推动缓存(放入水管的是打包的东西,需要推一把)
pw.flush();
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
//(控制台类)
class ServerMain:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class ServerMain {
public static void main(String[] args) {
try {
//创建 ss 服务器版的套接字(服务器比较高端,只要端口号就行)
ServerSocket ss = new ServerSocket(50000);
System.out.println("服务台上线");
String str0 = "我是服务器";
//创建 s 套接字,并在端口监听(为服务器干活的套接字,也高端,直接接通看到的管道就行)
Socket s = ss.accept();
System.out.println(s.getInetAddress()+"上线了");
Scanner sca = new Scanner(System.in);
//读取用的
//转换专用
InputStreamReader isr = new InputStreamReader(s.getInputStream());
//存放
BufferedReader br1 = new BufferedReader(isr);
//转换专用
OutputStreamWriter os = new OutputStreamWriter(s.getOutputStream());
//存放
PrintWriter pw = new PrintWriter(os,true);
while(true){
System.out.print("(服务器)请输入内容:");
//阻塞式进程,可以防止进入死循环
String str2 = sca.nextLine();
//写入
pw.println(str2);
//释放缓存
pw.flush();
String str1 = br1.readLine();
System.out.println("收到:"+str1);
}
}
catch (IOException e) {
e.printStackTrace();
}
}
}
【详细注释】Java->Socket 服务器与客户端的半双工通讯。拥有详细注释,完美诠释。
最新推荐文章于 2022-03-07 10:52:09 发布