模拟聊天室–做到当前在客户端和服务器之间进行数据通信(文本)
自定义一个 Socket 的服务端 一定要指定当前服务端的端口号服务端要在当前的端口号进行监听 客户端的访问
先启动服务端后启动客户端进行通信
服务端
public class ServiceTalk {
public static void main(String[] args) {
try {
ServerSocket ss = new ServerSocket(8888);
System.out.println("服务器启动,等待客户端连接...");
Socket s = ss.accept();
while(true){
BufferedReader br = new BufferedReader(
new InputStreamReader(s.getInputStream()));
PrintWriter pw = new PrintWriter(
new OutputStreamWriter(s.getOutputStream()));
BufferedReader console = new BufferedReader(new InputStreamReader(System.in));
String str = null;
if(null != (str =br.readLine()) && !"exit".equals(str)){
System.out.println(s.getInetAddress().getHostAddress()+":"+s.getPort()+"-客户端的消息为。。"+str);
System.out.println("服务器:");
String info = console.readLine();
pw.println(info);
pw.flush();
}else{
System.out.println("聊天结束,服务端进行关闭");
System.exit(0);
s.close();
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
客户端
public class ClientTalk {
public static void main(String[] args) {
try {
Socket s = new Socket("127.0.0.1", 8888);
System.out.println("客户端已启动,可以开始聊天...");
while(true){
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
PrintStream pw = new PrintStream(s.getOutputStream());
BufferedReader console = new BufferedReader(new InputStreamReader(System.in));
System.out.println("客户端:");
String info = console.readLine();
pw.println(info);
pw.flush();
String str = null;
if((str = br.readLine()) != null && !str.equals("exit")){
System.out.println(s.getInetAddress().getHostAddress()+":"+s.getPort()+"-服务器消息.."+str);
}else{
System.out.println("聊天结束,客户端开始关闭");
System.exit(0);
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
服务端结果
客户端结果