//服务器端
package com.demo;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class TestServer {
public static void main(String[] args) {
//服务器端 7*24
try(ServerSocket ss=new ServerSocket(9000);
//System.in只能关闭一回,必须放在服务器一起进行关闭。
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
){
while (true) {
//accept()返回当前连接的客户端对象,该方法是阻塞方法,如果没有客户端连接,一直等待监听
try (Socket s = ss.accept();
//getInputStream 获取输入流
InputStream is = s.getInputStream();
//向客户端写入
OutputStream os = s.getOutputStream();
//BufferedReader
) {
//服务器端反复对话
while (true) {
//accept方法一旦返回Socket对象,证明三次握手和流通道的建立已经完成
//接收客户端发送的数据
byte[] b = new byte[1024];
boolean flag = true;
int count = is.read(b);
//接收的客户端信息
String msg = new String(b, 0, count);
System.out.println("从客户端发送的内容为:" + msg);
//中断服务器端对应的客户端
if ("exit".equals(msg)) {
break;
}
//从服务器端给客户端响应
//服务器端在屏幕上输入的响应
System.out.println("请输入服务器端给客户端的响应:");
String input = br.readLine();
os.write(input.getBytes());
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}catch (Exception e) {
e.printStackTrace();
}
}
}
=====================================
// ① 客户端
package com.demo;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.util.Scanner;
public class TestClient {
public static void main(String[] args) {
try(Socket s=new Socket(InetAddress.getLocalHost(), 9000);
//getOutputStream 获取输出流
OutputStream os=s.getOutputStream();
//接收来自服务器端的数据
InputStream is=s.getInputStream();
//接收用户从屏幕上输入的信息
Scanner sc=new Scanner(System.in);
){
//反复对话
while (true) {
System.out.println("请输入客户端发送给服务器端的数据:");
//用户输入的数据
String msg = sc.next();
//数据的发送
os.write(msg.getBytes());
//退出
if("exit".equals(msg)) {
break;
}
//读取服务器中的内容
byte[] b = new byte[1024];
int count = is.read(b);
System.out.println("接收到从服务器发来的信息为:" + new String(b, 0, count));
}
}catch (Exception e) {
e.printStackTrace();
}
}
}