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);
 }


相关文章
|
17天前
|
安全 Java 数据处理
Python网络编程基础(Socket编程)多线程/多进程服务器编程
【4月更文挑战第11天】在网络编程中,随着客户端数量的增加,服务器的处理能力成为了一个重要的考量因素。为了处理多个客户端的并发请求,我们通常需要采用多线程或多进程的方式。在本章中,我们将探讨多线程/多进程服务器编程的概念,并通过一个多线程服务器的示例来演示其实现。
|
17天前
|
程序员 开发者 Python
Python网络编程基础(Socket编程) 错误处理和异常处理的最佳实践
【4月更文挑战第11天】在网络编程中,错误处理和异常管理不仅是为了程序的健壮性,也是为了提供清晰的用户反馈以及优雅的故障恢复。在前面的章节中,我们讨论了如何使用`try-except`语句来处理网络错误。现在,我们将深入探讨错误处理和异常处理的最佳实践。
|
21天前
|
网络协议 程序员 Python
pythonTCP客户端编程创建Socket对象
【4月更文挑战第6天】本教程介绍了TCP客户端如何创建Socket对象。Socket作为网络通信的基础单元,包含协议、IP地址和端口等信息。在TCP/IP中,Socket分为流式(TCP)、数据报(UDP)和原始套接字。以Python为例,创建TCP Socket对象需调用`socket.socket(AF_INET, SOCK_STREAM)`。为确保健壮性,应使用异常处理处理可能的`socket.error`。学习本教程将帮助你掌握TCP客户端创建Socket对象的技能。
|
1月前
|
网络协议 Linux C语言
Linux实现socket网络通信
Linux实现socket网络通信
|
1月前
|
网络协议 安全 API
计算机网络之Socket编程
计算机网络之Socket编程
|
16天前
|
存储 算法 Linux
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
40 6
|
14小时前
|
网络协议 Linux iOS开发
|
4天前
|
存储 网络协议 关系型数据库
Python从入门到精通:2.3.2数据库操作与网络编程——学习socket编程,实现简单的TCP/UDP通信
Python从入门到精通:2.3.2数据库操作与网络编程——学习socket编程,实现简单的TCP/UDP通信
|
12天前
|
网络协议 Ubuntu Unix
Linux 下使用 socket 实现 TCP 客户端
Linux 下使用 socket 实现 TCP 客户端
|
13天前
|
安全 程序员