1.服务端
package com.pgis.socket;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.Scanner;
public class MyServer {
public static final int MY_SERVER_PORT = 54321;
public static final Charset MY_COMM_CHARSET = StandardCharsets.UTF_8;
public static final String BYE = "BYE";
public static void main(String[] args) {
commWithClient();
}
private static void commWithClient() {
try (
ServerSocket ss = new ServerSocket(MY_SERVER_PORT);
Socket s = ss.accept();
){
MyChating myChating =new MyChating("客户端","你好,你已经连接上服务端了",s);
myChating.chatting();
} catch (IOException e) {
e.printStackTrace();
}
}
}
2.客户端
package com.pgis.socket;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
import static com.pgis.socket.MyServer.MY_SERVER_PORT;
public class MyClient {
public static void main(String[] args) {
commWithServer();
}
private static void commWithServer() {
try (
Socket s = new Socket("localhost",MY_SERVER_PORT);
) {
MyChating myChating =new MyChating("服务端",null,s);
myChating.chatting();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
3.聊天通信类
package com.pgis.socket;
import java.io.*;
import java.net.Socket;
import java.util.Scanner;
import static com.pgis.socket.MyServer.*;
public class MyChating {
private String from;
private String greeting;
private Socket s;
public MyChating(String from, String greeting, Socket s) {
this.from = from;
this.greeting = greeting;
this.s = s;
}
public void chatting(){
Scanner in = new Scanner(System.in);
try (
BufferedReader br = new BufferedReader(
new InputStreamReader(s.getInputStream(), MY_COMM_CHARSET)
);
PrintWriter pw = new PrintWriter(
new OutputStreamWriter(s.getOutputStream(), MY_COMM_CHARSET)
);
) {
if(greeting != null){
pw.println("客户端你好!我们连接上了!");
pw.flush();
}
while (true){
String line = br.readLine();
if (line.equalsIgnoreCase(BYE)){
pw.println(BYE);
break;
}else {
System.out.println(from+line);
String myword = in.nextLine();
pw.println(myword);
pw.flush();
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}