半双工,只有一条线,不能同时互相发送消息。类似对讲机。
半双工也是分为了服务器和客户端:
对于半双工就用两段代码来呈现:
服务器端:
package socket.halfdouble;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
/**
* @author Hercules
* @version 创建时间:2020年5月26日 下午5:26:05
* 类说明
*/
public class Server {
public static void main(String[] args) {
ServerSocket serverSocket = null;
Socket socket = null;
try {
serverSocket = new ServerSocket(9999);
socket = serverSocket.accept();
Scanner scanner = new Scanner(System.in);
while (true) {
//接收消息
InputStream is = socket.getInputStream();
InputStreamReader isr = new InputStreamReader(is, "utf-8");
BufferedReader br = new BufferedReader(isr);
System.out.println("客户端对你说" + br.readLine());
System.out.println("服务器说:");
String content = scanner.nextLine();
PrintWriter out = new PrintWriter(socket.getOutputStream(),true);
out.println(content);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
客户端:
package socket.halfdouble;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
/**
* @author Hercules
* @version 创建时间:2020年5月26日 下午5:26:17
* 类说明
*/
public class Client {
public static void main(String[] args) {
Socket socket = null;
try {
socket = new Socket("127.0.0.1",9999);
//给服务器发消息
Scanner scanner = new Scanner(System.in);
while(true) {
System.out.println("客户端说:");
String content = scanner.nextLine();
PrintWriter pr = new PrintWriter(socket.getOutputStream(),true);
pr.println(content);
//接收消息
InputStream is = socket.getInputStream();
//这里还要把字节流转成字符流,将编码设置成UTF-8
InputStreamReader isr = new InputStreamReader(is,"utf-8");
BufferedReader br = new BufferedReader(isr);
System.out.println("服务器对你说:"+br.readLine());
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
在运行的时候先运行服务器端,再运行客户端。
就可以进行聊天了:
接下来就可以进行聊天了。