模拟会话聊天室
v1:代码修正
1.定义成员变量套接字
2.在构造方法中初始化
3.start方法处理读写
4.main方法创建对象,调用start方法
客户端:
public class Client {
private Socket socket;
public Client(){
try {
socket = new Socket("localhost",5555);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void start() throws IOException {
//获取输出流,写信息
OutputStream out = socket.getOutputStream();
PrintWriter pw = new PrintWriter(out);
pw.println("hello server!");
pw.flush();
//获取输入流,读信息
InputStream is = socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String msg = br.readLine();
System.out.println(msg);
//关闭流,关闭套接字
br.close();
socket.close();
}
public static void main(String[] args) throws IOException {
Client client = new Client();
client.start();
}
}
服务端:
public class Server {
private ServerSocket serverSocket;
public Server() {
try {
serverSocket = new ServerSocket(5555);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void Start() throws IOException {
System.out.println("等待客户端的请求......");
//调用accept方法,接收请求
Socket socket = serverSocket.accept();
System.out.println("接收到一个客户端的请求......");
//获取输入流对象,读客户端的数据
InputStream is = socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String msg = br.readLine();
System.out.println(msg);
//处理后的结果通过输出流,写出去
OutputStream out = socket.getOutputStream();
PrintWriter pw = new PrintWriter(out);
msg+="hello client!";
pw.println(msg);
pw.flush();
//关闭流,关闭套接字对象
br.close();
pw.close();
socket.close();
serverSocket.close();
}
public static void main(String[] args) throws IOException {
Server server = new Server();
server.Start();
}
}
运行截图:
v2: 控制台一对一会话
在客户端实现接收控制台输入
在v1的基础上,将客户端的写信息模块改进为控制台输入。
//客户端
//获取输出流,写信息
OutputStream out = socket.getOutputStream();
PrintWriter pw = new PrintWriter(out);
Scanner scanner = new Scanner(System.in);
System.out.println("input:");
String str = scanner.next();
pw.println(str);
pw.flush();
运行截图:
v3:一个客户端和服务器多次会话
客户端使用while循环输入
服务器端使用while循环接收数据
在v2的基础上,将服务端中的start() 处理读写的方法改进到while循环中。
服务端:
public void Start() throws IOException {
System.out.println("等待客户端的请求......");
//调用accept方法,接收请求
Socket socket = serverSocket.accept();
System.out.println("接收到一个客户端的请求......");
//获取输入流对象,读客户端的数据
InputStream in = socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(in));
OutputStream out = socket.getOutputStream();
PrintWriter pw = new PrintWriter(out);
while