当在本地,向服务器发送信息时,服务器接受信息返回给客户端,此时采用多行读取时,客户端接收不到Server的信息

这篇具有很好参考价值的文章主要介绍了当在本地,向服务器发送信息时,服务器接受信息返回给客户端,此时采用多行读取时,客户端接收不到Server的信息。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

public class SocketTCP04Server {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket =new ServerSocket(9999);
        System.out.println("Server:"+serverSocket.getClass());
        System.out.println("正在等待用户连接...");

        //当有用户连接时,会返回一个socket对象
        Socket socket = serverSocket.accept();
        System.out.println("Client:"+serverSocket.getClass());//查看连接到的用户

        //接受Client的输入信息
        String read =null;
        InputStream inputStream = socket.getInputStream();
        BufferedReader bufferedReader =new BufferedReader(new InputStreamReader(inputStream));
        while ((read= bufferedReader.readLine())!=null){
            System.out.println(read);
        }
//        String s = bufferedReader.readLine();
//        System.out.println(s);
//        socket.shutdownInput();

        //现在向Client发送数据
        OutputStream outputStream = socket.getOutputStream();
        BufferedWriter bufferedWriter =new BufferedWriter(new OutputStreamWriter(outputStream));
        bufferedWriter.write("Hello, Client 字符流");
        bufferedWriter.newLine();//插入换行符,表示回复内容的结束
        bufferedWriter.flush();
        System.out.println("服务器已关闭~");

        bufferedWriter.close();
        bufferedReader.close();
        socket.close();
        serverSocket.close();

    }
}
public class SocketTCP04Client {
    public static void main(String[] args) throws IOException {
        Socket socket = new Socket(InetAddress.getLocalHost(), 9999);
        System.out.println("获取的Client的socket:" + socket.getClass());

        //现在向Server发送信息
        OutputStream outputStream = socket.getOutputStream();
        BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));
        bufferedWriter.write("Hello,server 字符流");
        bufferedWriter.newLine();
        /**插入换行符后,相当于写入结束,就不用socket.shutdownOutput();
        此时对面一定要使用readLine()一次读一行代表读取结束*/
        bufferedWriter.flush();

        //现在接受Server的信息
        InputStream inputStream = socket.getInputStream();
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
        String read = null;
        while ((read = bufferedReader.readLine()) != null) {
            System.out.println(read);
        }
//        String s = bufferedReader.readLine();
//        System.out.println(s);

        socket.shutdownInput();
        bufferedReader.close();
        bufferedWriter.close();
        socket.close();

    }
}

当在本地,向服务器发送信息时,服务器接受信息返回给客户端,此时采用多行读取时,客户端接收不到Server的信息,Java小疑问,韩顺平java习题,服务器,运维 

当在本地,向服务器发送信息时,服务器接受信息返回给客户端,此时采用多行读取时,客户端接收不到Server的信息,Java小疑问,韩顺平java习题,服务器,运维 

此时的服务器还在等待输入,客户端也在等待服务器的应答,产生死锁,僵持不下。

经过一番尝试后发现,

当使用单行读取的时候,使用bufferedWriter.newLine();此时就不用关闭socket的输出流即socket.shutdownOutput();可以省略,当然写上去也没错。

当使用多行读取的时候,此时,必须使用关闭socket的输出流,即socket.shutdownOutput();不能省略!!!

单行接受代码如下: 

这是Client: 

 //现在向Server发送信息
        OutputStream outputStream = socket.getOutputStream();
        BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));
        bufferedWriter.write("Hello,server 字符流");
        bufferedWriter.newLine();
        /**插入换行符后,相当于写入结束,就不用socket.shutdownOutput();
        此时对面一定要使用readLine()一次读一行代表读取结束*/
        bufferedWriter.flush();
        socket.shutdownOutput();//可以省略,加上不为错

这是Server端: 

//接受Client的输入信息
        String read =null;
        InputStream inputStream = socket.getInputStream();
        BufferedReader bufferedReader =new BufferedReader(new InputStreamReader(inputStream));
        String s = bufferedReader.readLine();
        System.out.println(s);
        socket.shutdownInput();

多行读取时:

这是Client端: 

 //现在向Server发送信息
        OutputStream outputStream = socket.getOutputStream();
        BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));
        bufferedWriter.write("Hello,server 字符流");
        bufferedWriter.newLine();
        /**插入换行符后,相当于写入结束,就不用socket.shutdownOutput();
        此时对面一定要使用readLine()一次读一行代表读取结束*/
        bufferedWriter.flush();
        socket.shutdownOutput();//一定不能省略

 这是Server端:文章来源地址https://www.toymoban.com/news/detail-734549.html

       //接受Client的输入信息
        String read =null;
        InputStream inputStream = socket.getInputStream();
        BufferedReader bufferedReader =new BufferedReader(new InputStreamReader(inputStream));
        while ((read= bufferedReader.readLine())!=null){
            System.out.println(read);
        }
        socket.shutdownInput();//不可省

到了这里,关于当在本地,向服务器发送信息时,服务器接受信息返回给客户端,此时采用多行读取时,客户端接收不到Server的信息的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【NanoHTTPD】Android,使用NanoHTTPD搭建服务器,接受Http请求,最佳实践

    安卓app,作为服务器,接受Http,get post 请求推送数据,NanoHTTPD是一个免费、轻量级的(只有一个Java文件) HTTP服务器,可以很好地嵌入到Java程序中。支持 GET, POST, PUT, HEAD 和 DELETE 请求,支持文件上传,占用内存很小。 开源地址:GitHub - NanoHttpd/nanohttpd: Tiny, easily embeddable HTTP serv

    2024年02月10日
    浏览(36)
  • UDP网络编程的接受与发送信息

     

    2024年02月07日
    浏览(30)
  • C# webservice 接收json数据 接口返回 远程服务器返回错误: (500) 内部服务器错误

    C# post 调用webservice 服务端接口,会返回上面那个错误,8成是发送的数据和接口不符合造成的。有2种情况 第一种情况如下:如果类型是默认request.ContentType = \\\"application/x-www-form-urlencoded\\\";这个类型 那么你发送数据和被调用接口参数名如果不对,则会报下图这个错 我发送的参数名

    2024年02月13日
    浏览(49)
  • 服务器的返回码

            404 Not Found:一般来说是指服务器找不到请求的资源,特殊来说是找到了但不想给你。         502 bad gateway:Web 服务器作为网关或代理服务器时收到无效的响应,如果其他人访问该界面也是502则表示服务器挂了。         1××是信息状态码,表示临时响应并需要客

    2024年02月07日
    浏览(16)
  • C#向指定的ip地址通过TCP/IP协议发送和接受信息

    需要使用Socket类来创建和连接TCP/IP套接字,并使用Send和Receive方法来发送和接收数据。还需要引用System.Net和System.Net.Sockets命名空间。 以下是一个示例代码,它发送一个字符串消息到指定的IP地址和端口,并接收返回消息。 了解更多C#可以访问C#的官方教程 本文也参考了C#的官

    2024年02月07日
    浏览(31)
  • 服务器发送http请求

    1、发送GET请求 curl localhost:9009/setCreateDataItem?a=1b=nihao 2、发送POST请求 3、发送json格式请求: 其中, -H 代表header头, -X 是指定什么类型请求(POST/GET/HEAD/DELETE/PUT/PATCH), -d 代表传输什么数据。这几个是最常用的。 查看所有curl命令: man curl或者curl -h 请求头:H,A,e 响应头:I,i,D

    2024年01月25日
    浏览(37)
  • 【服务器】搭建hMailServer 服务实现远程发送邮件

    hMailServer 是一个邮件服务器,通过它我们可以搭建自己的邮件服务,通过cpolar内网映射工具即可实现远程发送邮件,不需要使用公网服务器,不需要域名,而且邮件账号名称可以自定义. 下面以windows 10系统为环境,介绍使用方法: 1. 安装hMailServer 进入官方下载:https://www.hmailserver.com/do

    2024年02月10日
    浏览(33)
  • java连接websocket服务器并发送消息

    一、用python快速启动一个websocker服务器 二、使用java连接并发送消息

    2024年02月11日
    浏览(37)
  • c# 设置代理服务器发送http请求

    2024年02月16日
    浏览(34)
  • Qt实现客户端与服务器消息发送

    里用Qt来简单设计实现一个场景,即: (1)两端:服务器QtServer和客户端QtClient (2)功能:服务端连接客户端,两者能够互相发送消息,传送文件,并且显示文件传送进度。 环境:VS20013 + Qt5.11.2 + Qt设计师 先看效果: 客户端与服务器的基本概念不说了,关于TCP通信的三次握

    2024年02月11日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包