Socket网络编程练习题二:客户端发送一条数据,接收服务端反馈的消息并打印;服务端接收数据并打印,再给客户端反馈消息

简介: Socket网络编程练习题二:客户端发送一条数据,接收服务端反馈的消息并打印;服务端接收数据并打印,再给客户端反馈消息

题目

  • 客户端:发送一条数据,接收服务端反馈的消息并打印
  • 服务端:接收数据并打印,再给客户端反馈消息

代码实战

1、客户端代码

package com.hidata.hiops.paas.demo;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;
/**
 * @Description : 客户端
 * @Date: 2023-09-27 10:08
 */
public class Client {
    public static void main(String[] args) throws IOException {
        //创建Socket客户端对象并连接服务端
        Socket socket = new Socket("127.0.0.1",10001);
        //获取输出流
        OutputStream ops = socket.getOutputStream();
        String str = "你好,服务端";
        ops.write(str.getBytes());
        //给服务器写一个结束标记
        socket.shutdownOutput();
         //接收服务端回写的数据
        InputStreamReader isr = new InputStreamReader(socket.getInputStream());
        int b;
        while ((b = isr.read()) != -1){
            System.out.print((char)b);
        }
        //释放资源
        socket.close();
    }
}

2、服务端代码

package com.hidata.hiops.paas.demo;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
/**
• @Description :服务端
• @Date: 2023-09-27 10:16
*/
public class Server {
public static void main(String[] args) throws IOException {
//创建服务端对象并绑定端口10001
 ServerSocket serverSocket = new ServerSocket(10001);
 //等待客户端来连接
 Socket socket = serverSocket.accept();
 //读取数据
 InputStreamReader isr = new InputStreamReader(socket.getInputStream());
 int b;
 while ((b = isr.read()) != -1){
     System.out.print((char)b);
 }
 //回写给客户端
 OutputStream ops = socket.getOutputStream();
 ops.write("我收到你的问候咯,你好 客户端!".getBytes());
 //释放资源
 socket.close();
 serverSocket.close();
  • }
    }

3、运行结果

客户端运行结果

我收到你的问候咯,你好 客户端!
Process finished with exit code 0

服务端运行结果

你好,服务端
Process finished with exit code 0

总结

本练习题的核心之处在于:客户端在接收服务端反馈的消息之前,要加上 这句代码

socket.shutdownOutput();

表示 给服务端加一个标记,告诉服务端,客户端这边的数据已经写完了,否则服务端程序会一直停在read方法这里,等待读取下面的数据

while ((b = isr.read()) != -1){
   System.out.print((char)b);
 }


相关文章
|
12天前
|
网络协议 算法 Linux
【嵌入式软件工程师面经】Linux网络编程Socket
【嵌入式软件工程师面经】Linux网络编程Socket
29 1
|
16小时前
|
缓存 网络协议 Linux
c++实战篇(三) ——对socket通讯服务端与客户端的封装
c++实战篇(三) ——对socket通讯服务端与客户端的封装
|
2天前
|
网络协议 Java API
【Java】Java Socket编程:建立网络连接的基础
【Java】Java Socket编程:建立网络连接的基础
10 1
|
15天前
|
网络协议 Unix API
24.Python 网络编程:socket编程
24.Python 网络编程:socket编程
17 2
|
15天前
|
网络协议 API
网络编程套接字(2)——Socket套接字
网络编程套接字(2)——Socket套接字
9 0
|
16天前
|
XML 网络协议 Java
53. 【Android教程】Socket 网络接口
53. 【Android教程】Socket 网络接口
16 0
|
22天前
|
网络协议 Java 数据库连接
基于 Socket 网络编程
基于 Socket 网络编程
|
22天前
|
网络协议 数据格式
基于 Socket 的网络编程
基于 Socket 的网络编程
24 2
|
26天前
|
设计模式 监控 网络协议
socket通信处于网络协议那一层和两种接收发送消息方式
socket通信处于网络协议那一层和两种接收发送消息方式
25 2
|
27天前
|
监控 网络架构 Windows
第六十八章 使用 Web 服务监控 IRIS - 监控网络客户端
第六十八章 使用 Web 服务监控 IRIS - 监控网络客户端
8 0

热门文章

最新文章