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,接着就可以正确的上传文件了.