接下来代码实现
以下服务端 用来接收消息
public class WechatServer {
static byte[] bytes = new byte[1024];
public static void main(String[] args) {
try {
// 用于监听
ServerSocket serverSocket = new ServerSocket();
serverSocket.bind(new InetSocketAddress(8080));
while (true) {
System.out.println("wait conn ...");
// 阻塞 等待连接
Socket socket = serverSocket.accept();
System.out.println("conn success");
System.out.println("wait data...");
// 阻塞 read 读了多少字节 阻塞拿数据
int read = socket.getInputStream().read(bytes);
System.out.println("data success");
String content = new String(bytes);
System.out.println(content);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
以下是客户端
在这里可以发送消息
public class Client {
public static void main(String[] args) {
try {
Socket socket = new Socket("127.0.0.1",8080);
Scanner scanner = new Scanner(System.in);
String txt = scanner.next();
socket.getOutputStream().write(txt.getBytes());
} catch (IOException e) {
e.printStackTrace();
}
}
}
首先, 启动服务端
输出wait conn… 等待连接
然后启动客户端
现在是等待输入状态,将想要发送给服务器的数据输入
发送结束,客户端停止,现在回去看服务端
当启动客户端时,服务端输出conn success 连接成功, 然后等待数据 wait data
客户端发送数据, 接收输出 客户端发来的数据
然后继续等待连接
其实,这是bio ,同步阻塞:
在JDK1.4出来之前,我们建立网络连接的时候采用BIO模式,需要先在服务端启动一个ServerSocket,
然后在客户端启动Socket来对服务端进行通信, 默认情况下服务端需要对每个请求建立一堆线程等待请求,
而客户端发送请求后,先咨询服务端是否有线程相应,如果没有则会一直等待或者遭到拒绝请求,
如果有的话,客户端会线程会等待请求结束后才继续执行。