1、实现在客户端刚连上服务端时,就收到服务端的欢迎信息。
在服务端通过Socket获取输出流,客户端获取输入流,实现服务端将消息发送给客户端.
这里让服务端直接将客户端发送过来的消息再回复给客户端来进行测试。
2、实现客户端和服务端在控制台发送消息
主要用到DataOutputStream,DataInputStream装饰类,使用dataOutputStream.writeUTF()接收输出的信息,dataInputStream.readUTF()读传入的信息
服务端代码:
public static void main(String[] args) {
try {
//1.创建socket对象
ServerSocket serverSocket = new ServerSocket(2000);
//2.监听 会返回一个客户端socket对象,有了监听,那么就有了阻塞
Socket socket = serverSocket.accept();
//System.out.println("远程主机地址:" + socket.getRemoteSocketAddress());
//接收
InputStream input = socket.getInputStream();
DataInputStream in = new DataInputStream(input);
System.out.println(in.readUTF());
//输出
OutputStream output = socket.getOutputStream();
DataOutputStream out = new DataOutputStream(output);
System.out.println("服务端:");
out.writeUTF("欢迎访问服务端!");
out.flush();
String message = null;
while ((message = in.readUTF()) != null) {
System.out.println("客户端说:" + message);
out.writeUTF("服务器已收到"+message);
}
out.writeUTF("服务器已收到"+message);
out.flush();
out.close();
in.close();
socket.close();
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
客户端代码:
客户端要找相应的服务,所以必须有 ip 和 端口
public static void main(String[] args) {
try {
//1、客户端要找相应的服务,所以必须 ip 和 端口
Socket socket = new Socket("10.25.135.133",2000);
//输出
OutputStream out = socket.getOutputStream();
DataOutputStream dataOutputStream = new DataOutputStream(out);
System.out.println("客户端:");
dataOutputStream.writeUTF("Hello world!");
dataOutputStream.flush();
//接收
InputStream in = socket.getInputStream();
DataInputStream dataInputStream = new DataInputStream(in);
System.out.println(dataInputStream.readUTF());
Scanner scanner = new Scanner(System.in);
while(true) {
String line = scanner.nextLine();
if("exit".equalsIgnoreCase(line)){
break;
}
dataOutputStream.writeUTF(line);
System.out.println(dataInputStream.readUTF()); //输出
}
dataOutputStream.flush();
out.flush();
out.close();
dataInputStream.close();
in.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
先运行服务端,启动完成后再运行客户端
运行效果