1,当使用调用 在服务器端调用readLine()的时候,客户端就如果调用的是print()方法就会卡住,而且不会报错,改成println() 就会畅通!

2,如果 socket端

while()循环读取文件并写入输出 流

而 ServerSocket端 while(readLine()!=null) 这样写也会卡住,  ServerSocket端 此时读的是流  会一直等待输入,而不会读取到null ,除非你在socket 端的循环结束后,刻意写入null

如何控制控制read()读取呢?  假如缓冲区的大小是1024位,

模拟上传文件(纯属个人思路,刚学习,没有经验,请担待),

1,要先发送文件名,像我们上传到百度云的文件名 是不是和我们在本地的文件名字是不是一样的? 所以要先发送文件名字,让服务端先收到名字,然后再根据名字判断是否有重名

然后在发送文件.

2,按照思路,就是先发送文件名,服务端接收,然后客户端再发送文件.服务端再接收.这个中间就会产生问题,一般情况下,我们的一个文件名字怎么也不会达到1024位把? 但是服务器端在读取的时候,直到缓冲区读满,才会结束,服务端是读取不到-1的,所以服务器端为了读满缓冲区,即会一直等到文件内容传输的时候,读取文件的内容在填充缓冲区,作为文件名字,这时候如果你不注意的话,就会产生很多的乱码.即使上传成功,文件也打开,因为部分文件内容被读取到文件名中了.所以文件名字也是乱码.

解决办法:

1,在服务端第一次读取之后设置超时 setSoTimeout(10);捕获异常SocketException,不要抛出.

2,在客户端第一一次发送结束后设置Thread.sleep(10); 由于此处的休眠,导致服务端在10毫秒内读取不到内容,从而导致其超时.

3,在服务端的超时触发之后,就会结束本次读取. 即可以读取到正确的文件名字了.

4,接着就可以正确的上传文件了.

java socket readline 阻塞_java Socket readLine() 阻塞相关推荐

  1. java write阻塞_java socket/output stream writes:他们阻塞?

    在Socket上的写也可以阻塞,特别是如果它是一个TCP套接字. OS将仅缓冲一定量的未发射(或发射但未确认)的数据.如果你写的东西快于远程应用程序能够读取它,套接字最终会备份,你的写调用将被阻塞. ...

  2. java socket远空_JAVA Socket超时浅析

    套接字或插座(socket)是一种软件形式的抽象,用于表达两台机器间一个连接的"终端".针对一个特定的连接,每台机器上都有一个"套接字",可以想象它们之间有一条 ...

  3. java socket 线程池_java socket编程的一个例子(线程池)

    服务器程序EchoServer.java: import java.io.*; import java.net.*; import java.util.concurrent.*; public cla ...

  4. java socket 循环读取_java socket tcp(服务器循环检测)

    刚才看了下以前写了的代码,tcp通信,发现太简单了,直接又摘抄了一个,运行 博客:http://blog.csdn.net/zhy_cheng/article/details/7819659 优点是服 ...

  5. java socket编程心跳_Java Socket编程心跳包创建实例解析

    1.什么是心跳包? 心跳包就是在客户端和服务器间定时通知对方自己状态的一个自己定义的命令字,按照一定的时间间隔发送,类似于心跳,所以叫做心跳包. 用来判断对方(设备,进程或其它网元)是否正常运行,采用 ...

  6. java socket负载均衡_Java Socket分发服务负载均衡

    1 1. 设备请求分发服务器,分发服务器返回有效的socket服务器ip与port,然后断开连接.2 a) 设备与服务器建立连接.3 b) 服务器接收到连接请求后,立即将分配好的socket服务器ip ...

  7. java socket通信 客户端_JavaのSocket编程之简单客户端与服务器端通信

    Socket编程之简单客户端与服务器端通信 socket 通常用来实现客户端和服务端的连接,socket 是Tcp/Ip协议的一个十分流行的编程界面,一个socket 由一个Ip地址和一个端口号唯一确 ...

  8. java socket 全双工客户端_java socket实现全双工通信

    单工.半双工和全双工的定义 如果在通信过程的任意时刻,信息只能由一方A传到另一方B,则称为单工. 如果在任意时刻,信息既可由A传到B,又能由B传A,但只能由一个方向上的传输存在,称为半双工传输. 如果 ...

  9. java socket聊天工具_java+socket 简易聊天工具

    1.服务器端程序 package com.test3; import java.io.*; import java.net.*; import java.awt.*; import java.awt. ...

最新文章

  1. 首个面向自动驾驶领域的3D点云目标检测教程!(单模态+多模态/数据+代码)
  2. [js高手之路] 设计模式系列课程 - DOM迭代器(2)
  3. caffeImagenet相关
  4. 如何选择WinPE版本?-日常IT维护必备工具WinPE
  5. Java练习 SDUT-2401最大矩形面积
  6. [整理]MySql批量数据导入Load data infile解决方案
  7. goto语句_11. Go语言流程控制:goto 无条件跳转
  8. 排队8小时,火遍上海!美国最会装X的网红咖啡,又把中国人拿捏了
  9. catia2017安装包打开没反应_云顶手游10.19安装包,9月16日
  10. spring boot (整合redis)
  11. Android 存储学习之在内部存储中读写文件
  12. Linux: sctp 实例
  13. Bitbake基本语法
  14. P2345 [USACO04OPEN]MooFest G 【树状数组】
  15. java rrd 读取_RRDtool 系列连载-6 :如何从 RRD 数据库中提取数据 - RRDtool - 阿勃的 blog...
  16. vue无法加载文件C:\Users\Administrator\AppData\Roaming\npm\vue.ps1因为在此系统上禁止运行脚本……解决办法
  17. 【BUG】【已解决】电脑更新后Microsoft Edge图标不见,且打开闪退
  18. asp.net gridview itemtemplate中控件事件获取行参数
  19. 织梦dedecms程序安全设置
  20. 今天我又带来了一款超好用的百度网盘高速下载器~附软件资源

热门文章

  1. 解决powershell无法重装edge
  2. 电脑开机显示器没反应,键盘也没有反应,就鼠标一直是亮着
  3. 教授专栏05 | 黄昊:得益区块链技术,元宇宙蓄势待发
  4. Python入门教程(二)
  5. CSS清除浮动-after伪元素
  6. SQL 语句中的 (+)
  7. 肇兴:男人的天堂,来了就不想走--义工篇
  8. COUNT(1)和COUNT(*) 的区别
  9. 雷雨(2008.07.08夜雨杂记)
  10. 导航菜单中常用的css下划线动画效果-案例