这要从socket的函数调用说起,当你write第一次时,对端已经close掉了。即第一次write时写的是一个FIN的socket,这是不会报错的,虽然表面上成功了,但对端不会接收到。同时,该次的write导致了本端socket产生一个RST,当你第二次write一个RST的socket时,就会引出Connection reset by peer的异常,这和BSD风格的socket错误信息是一致的。注意,通常对一个RST socket写会导致错误,在UNIX下用C的话,会导致程序终止。而在WIN下,则错误信息就是Connection reset by peer。JAVA的socket实际上是通过JNI方式调用C的socket函数,所以对BSD socket风格的函数最好有一定的了解。有关这方面的问题,在《UNIX网络编程》中有精辟的描叙,该书是编写socket程序的极好参考手册,建议放在案头阅读。