服务端执行server.accept方法以后,会处于阻塞状态,也就是直到启动了客户端,从客户端传来信息才会继续运行下去,而客户端在启动后也处于阻塞状态,直到服务端给它回应才会继续运行下去
先运行服务器后,控制台不会有任何输出
运行客户端以后,服务器端才会输出“一个客户端建立连接”
然后客户端输出 ”欢迎使用“
服务端:
/**
必须先启动服务器 后连接
1、创建服务器 指定端口 ServerSocket(int port)
2、接收客户端连接
3、发送数据+接收数据
*
*/
public class Server {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
//1、创建服务器 指定端口 ServerSocket(int port)
ServerSocket server = new ServerSocket(8888);
//2、接收客户端连接 阻塞式
Socket socket =server.accept();
System.out.println("一个客户端建立连接");
//3、发送数据
String msg ="欢迎使用";
//输出流
/*
BufferedWriter bw = new BufferedWriter(
new OutputStreamWriter(
socket.getOutputStream()));
bw.write(msg);
bw.newLine();
bw.flush();
*/
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
dos.writeUTF(msg);
dos.flush();
}
}
客户端:
/**
1、创建客户端 必须指定服务器+端口 此时就在连接
Socket(String host, int port)
2、接收数据 +发送数据
*/
public class Client {
/**
* @param args
* @throws IOException
* @throws UnknownHostException
*/
public static void main(String[] args) throws UnknownHostException, IOException {
//1、创建客户端 必须指定服务器+端口 此时就在连接
Socket client = new Socket("localhost",8888);
//2、接收数据
/*
BufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream()));
String echo =br.readLine(); //阻塞式方法
System.out.println(echo);
*/
DataInputStream dis = new DataInputStream(client.getInputStream());
String echo = dis.readUTF();
System.out.println(echo);
}
}
这里的服务器只能接受一个客户端的链接,
要实现多客户端的链接也很简单
只要把接受数据代码块放在死循环中就好了
public class MultiServer {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
//1、创建服务器 指定端口 ServerSocket(int port)
ServerSocket server = new ServerSocket(8888);
//2、接收客户端连接 阻塞式
while(true){ //死循环 一个accept()一个客户端
Socket socket =server.accept();
System.out.println("一个客户端建立连接");
//3、发送数据
String msg ="欢迎使用";
//输出流
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
dos.writeUTF(msg);
dos.flush();
}
}
}