其实服务端和客服端的代码,大同小异,会写服务端,那么一定会写客服端
先写一个服务器Sever类(等待客户端连接)
1.借用 ServerSocket端口
ServerSocket负责接收客户连接请求
2.创建对象
因为会有网络异常,所以把对象直接写在try{
ServerSocket serverSocket = new ServerSocket(60088)
}catch{Exception e){
}中处理异常
60088是自己电脑的端口号(此处填写自己的)
try{
ServerSocket serverSocket = new ServerSocket(60088)
}catch{Exception e){
}
3.进行等待客户端连接
Socket c = serverSocket.accept();//中断,等待
有人连接的话阔以输出一下有人连接
System.out.println("有人连线");
4. 接受客户端的消息
下行代码整体意思就是用InputStreamReader这个中介把c .getInputStream()这个字节流转换成字符流BufferedReader进行读取
这样输入的时候就可以不是一个一个字节读,而是一个一个字符读,再加上是个Buffer,效率会高很多。
然后输出读取内容
BufferedReader reader = new BufferedReader(new InputStreamReader(c.getInputStream()));
System.out.println(reader.readLine());
5.发信息给客户端
使用PrintWriter打印流输出打印自己的客户端的内容
PrintWriter printWriter = new PrintWriter(c.getOutputStream());
使用Scanner键盘输入信息
Scanner sc = new Scanner(System.in);
System.out.print("输入信息");
并进行打印换行输出
printWriter.write(sc.nextLine() + "\r\n");
关闭打印流,,服务端写完啦
printWriter.flush();
6.最后在写一个while(true){}死循环,,中间内容就是发信息和接受信息 的代码(整体代码处有)
7.整体代码
package cn;/*
* Copyright (c) 2020, 2023.
*
*/
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
/**
* <p>Project: Ch11 - Sever</p>
* <p>Powered by Cyy On 2023-07-26 10:58:04</p>
* <p>描述:<p>
*
* @author Cyy [210585265@qq.com]
* @version 1.0
* @since 17
*/
public class Sever {
public static void main(String[] args) throws IOException {
try (ServerSocket serverSocket = new ServerSocket(60088)) {
// while (true) {多人连线
Socket c = serverSocket.accept();//中断,等待
System.out.println("有人连线");
while (true) {
//接受信息
BufferedReader reader = new BufferedReader(new InputStreamReader(c.getInputStream()));
System.out.println(reader.readLine());
//发信息
PrintWriter printWriter = new PrintWriter(c.getOutputStream());
Scanner sc = new Scanner(System.in);
System.out.print("输入信息");
printWriter.write(sc.nextLine() + "\r\n");
printWriter.flush();
}
} catch(Exception e){
e.printStackTrace();
}
//}
}
}
编写客户端 (主动连接服务端)
1.借用Socket构造方法
当客户进程发出的连接请求被服务器拒绝,Socket构造方法就会抛出ConnectionException。
所以处理异常
电脑的IP地址192.168.21.19,端口号60088(此处填写自己的)
try{
Socket c = new Socket("192.168.21.19",60088)
}catch(Exception e){
}
2. 使用PrintWriter打印流输出打印自己的客户端的内容
PrintWriter printWriter = new PrintWriter(c.getOutputStream());
使用Scanner键盘输入信息
Scanner sc = new Scanner(System.in);
3.给服务端发信息
键盘输入信息并答应出信息
System.out.print("输入信息");
printWriter.write(sc.nextLine()+"\r\n");
关闭打印流
printWriter.flush();
4.接收服务端的信息
下行代码整体意思就是用InputStreamReader这个中介把c .getInputStream()这个字节流转换成字符流BufferedReader进行读取
这样输入的时候就可以不是一个一个字节读,而是一个一个字符读,再加上是个Buffer,效率会高很多。
然后输出读取内容
BufferedReader reader = new BufferedReader(new InputStreamReader(c.getInputStream()));
System.out.println(reader.readLine());
5.最后和服务端一样在写一个while(true){}死循环,,中间内容就是发信息和接受信息 的代码(整体代码处有)
6.整体代码
package cn;/*
* Copyright (c) 2020, 2023.
*
*/
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
/**
* <p>Project: Ch11 - Sever2</p>
* <p>Powered by Cyy On 2023-07-26 10:44:50</p>
* <p>描述:<p>
*
* @author Cyy [210585265@qq.com]
* @version 1.0
* @since 17
*/
public class Client {
public static void main(String[] args) {
//和别人连线
//192.168.21.6 1122
//自己的IP地址192.168.21.19
try(Socket c = new Socket("192.168.21.19",60088)){
PrintWriter printWriter = new PrintWriter(c.getOutputStream());
Scanner sc = new Scanner(System.in);
while(true){
//发信息
System.out.print("输入信息");
printWriter.write(sc.nextLine()+"\r\n");
printWriter.flush();
//接受信息
BufferedReader reader = new BufferedReader(new InputStreamReader(c.getInputStream()));
System.out.println(reader.readLine());}
}catch(Exception e){
e.printStackTrace();
}
}
}
客户端成功连接服务端