socket的bufferedwriter.write()和bufferedwriter.flush()奇怪问题请教

samsam28 2002-01-17 02:07:14
socket的bufferedwriter.write()和bufferedwriter.flush()奇怪问题请教,谢谢

原代码如下:
....................
while(true)
{

try
{
socket = new Socket(InetAddress.getByName(IP), port);
bufferedwriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
..........
while(true)
{
..........
bufferedwriter.write(.......);
bufferedwriter.flush();
if(.......) break;
}
socket.close();
bufferedwriter.close();
}

catch(Exception exception)
{
System.out.printl(exception);
}

}
.........................

介绍
1 程序在一般情况下运行正常
2 代码中...... 部分绝对正确
3 对方的端口(C编写)在10分钟之内没有数据到达时会自动close,然后重新初始化到listen状态

奇怪的问题
1 当数据传送空闲10几分钟后,又重新得到一个新的数据A开始发送(此时对方已经close后再恢复到listen状态),这一个数据A就送不过去了,而且也没有捕获到任何异常!!!!
2 当紧跟着数据A的第二个数据B开始发送时,这个时候就捕获到了异常,然后程序重新连接,然后一切又都正常了
异常提示:java.net.SocketException: Connection aborted by peer: socket write error
3 每次都是这样,第一个发不过去,到第二个才开始捕获到异常后重新连接再发送就正常了

请教专家高手,这是什么原因?该怎么解决?
谢谢

...全文
223 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
skyyoung 2002-01-17
  • 打赏
  • 举报
回复
import java.io.*;
import java.util.*;
import java.net.*;

class TCPCCSocket extends Thread
{
private Socket CCSocket;
TCPCCSocket (Socket cs)
{
CCSocket = cs;
}
public void start()
{
System.out.println("Starting CCS...");
super.start();
}
public void closeSocket()
{
try
{
System.out.println("Close CCS...");
super.stop();
CCSocket.close();
}
catch(IOException exClose)
{
System.out.println("Error When Close CCS ...");
exClose.printStackTrace();
}
}
public void run()
{
System.out.println("Running CCS...");
System.out.println(toString());
byte[] readingByte = { 0 };
try
{
while(readingByte[0] != -1)
{
readingByte[0] = (byte)CCSocket.getInputStream().read();
CCSocket.getOutputStream().write(readingByte[0]);
}
}
catch(IOException exEcho)
{
System.out.println("Error When Echo CCS ...");
}
try
{
CCSocket.close();
}
catch(IOException exClose)
{
System.out.println("Error When Close CCS ...");
exClose.printStackTrace();
}
System.out.println("End Running CCS...");
super.stop();
}
}

skyyoung 2002-01-17
  • 打赏
  • 举报
回复
import java.io.*;
import java.util.*;
import java.net.*;

class TCPServerSocketThread extends Thread
{
private static ServerSocket ListeningSocket;
private Vector CCSArray;
private int CCSCount;
private static int SocketsCount;
private static int LPort;
private Socket tmpCCS;

TCPServerSocketThread (Vector targetSocketArr, int ListenPort)
{
ListeningSocket = null;
SocketsCount = 0;
if(ListenPort > 1024)
LPort = ListenPort;
else
LPort = 10000;
CCSArray = targetSocketArr;
}

TCPServerSocketThread (Vector targetSocketArr)
{
ListeningSocket = null;
SocketsCount = 0;
LPort = 10000;
CCSArray = targetSocketArr;
}

public void stopServer()
{
try
{
System.out.println("Close All CCS...");
int sockCount = CCSArray.size();
TCPCCSocket tmpWCCS;
while(sockCount > 0)
{
tmpWCCS = (TCPCCSocket)CCSArray.elementAt((sockCount - 1));
System.out.println("Close Next CCS...");
if(tmpWCCS != null)
tmpWCCS.closeSocket();
CCSArray.remove((sockCount - 1));
sockCount -- ;
}
System.out.println("Close Server Socket...");
ListeningSocket.close();
SocketsCount -= 1;
super.stop();
}
catch(IOException exFL)
{
System.out.println("Exception On Close Server Socket...");
exFL.printStackTrace();
}
}

public void run()
{
System.out.println("Run Server Thread...");
System.out.println(toString());
if(ListeningSocket == null)
return;
TCPCCSocket tmpWCCS;
while(true)
{
try
{
System.out.println("Server Thread Listening...");
tmpCCS = ListeningSocket.accept();
System.out.println(tmpCCS.toString());
tmpWCCS = new TCPCCSocket(tmpCCS);
CCSArray.add(tmpWCCS);
tmpWCCS.start();
CCSCount += 1;
}
catch(IOException exRL)
{
System.out.println("Exception On Server Thread Listening...");
exRL.printStackTrace();
}
}
}
public void startServer()
{
System.out.println("Start Server Thread...");
if(SocketsCount != 0)
return;
SocketsCount += 1;
try
{
System.out.println("Create Server Socket...");
ListeningSocket = new ServerSocket(LPort);
super.start();
}
catch(IOException exLS)
{
System.out.println("Exception On Create Server Socket...");
exLS.printStackTrace();
}
}
}

23,404

社区成员

发帖
与我相关
我的任务
社区描述
Java 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧