/**
* 基于TCP协议的Socket通信,实现用户登录 服务端
*/
public class TcpServer{
public static void main(String[] args) {
try {
// 1.创建一个服务器端的 Socket,即 ServerSocket,指定绑定的端,并监听
ServerSocket server = new ServerSocket(8888);
// 2.调用 accept 方法开始监听,等待客户端连接
System.out.println("****服务器开始启动,等待客户端上线****");
Socket socket = server.accept();
// 3.获取一个输入流,用来读取客户端所发送的登录信息
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);
}
socket.shutdownInput();// 关闭输入流 // 4.获取输出流
OutputStream os = socket.getOutputStream();
PrintWriter pw = new PrintWriter(os);// 包装打印流
pw.write("好的,我收到消息了,你可以出去玩了");
pw.flush();
socket.shutdownOutput();
// 5.关闭资源
pw.close();
br.close();
isr.close();
is.close();
server.close();
} catch (IOException e) {
}finally {
}
}
}
/*
* 客户端
* */
public class TcpClient{
public static void main(String[] args) {
try {
// 1.创建 socket 指定服务器地址和端
Socket client = new Socket("localhost", 8888);
// 2.客户端向服务器发送登录信息
OutputStream os = client.getOutputStream();// 字节输出流
PrintWriter pw = new PrintWriter(os);
pw.write("用户名: admin;密码:123");
pw.flush();
client.shutdownOutput();// 关闭输出流 // 3. 获取输入流
InputStream is = client.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String info = null;
while ((info = br.readLine()) != null) {
System.out.println("服务器发来消息说:" + info);
}
// 3.关闭其他资源
pw.close();
os.close();
client.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
spring项目启动的同时,开启一个socket服务端
/**
* 基于TCP协议的Socket通信,实现用户登录 服务端
*/
@Component
public class TcpServer{
static {
new Thread(new Runnable() {
@Override
public void run() {
try {
ServerSocket server = new ServerSocket(8765);
System.out.println("=========tcp启动了=========");
while(true) { // 死循环持续监听
// 当前线程进入阻塞(等待处理连接请求),该线程和后面处理往来数据的线程是同一个线程。
// 如果该线程正在处理数据,而此时又来了新的socketClient连接请求,并且仍由该线程处理,
// 那么此时,请求会进入等待,直到该线程处理完前面的数据。
Socket socket = server.accept();
InputStream is = socket.getInputStream();// 字节输入流
InputStreamReader isr = new InputStreamReader(is);// 将字节流转为
BufferedReader br = new BufferedReader(isr);// 为输入流添加缓冲
StringBuilder sb = new StringBuilder();
String info = null;
while ((info = br.readLine()) != null) {
System.out.println("我是服务器,客户端说" + info);
sb.append(info);
}
socket.shutdownInput();// 关闭输入流
OutputStream os = socket.getOutputStream(); // 4.获取输出流
PrintWriter pw = new PrintWriter(os); // 包装打印流
//
if("chazhuang.txt".equals(sb.toString())) {
// 获取插桩文件
String gen = System.getProperty("user.dir");
BufferedReader reader = new BufferedReader(new FileReader(new File(gen+"/chazhuang.txt")));
String tempStr = null;
while ((tempStr = reader.readLine()) != null) {
pw.write(tempStr+"\n");
pw.flush();
}
reader.close();
}
socket.shutdownOutput();
// 5.关闭资源
pw.close();
br.close();
isr.close();
is.close();
//server.close();
}
} catch (IOException e) {
}finally {
}
}
}).start();
}
网友评论