我的十六亩三分地 2010-11-29 20:19
浏览 211
已采纳

关于Socket的问题

最近在做一个用java Socket编程实现CHAP协议的一个作业,我写的代码分为服务器端和客户端!服务器端启动后就进入监听连接状态:[code="java"]while(true) {
try {
Socket socket = chapServer.getServerSocket().accept();
System.out.println("与" + socket.getInetAddress().toString().substring(1) + "链路建立成功");
ServerThread thread = (ServerThread) XMLConfigReader.getInstance().getThreadBean("serverThread");
thread.init(socket, chapServer.getName());
thread.startNewChallenge();
Date timeStart = new Date();
while(true) {
System.out.println("main线程");
if((new Date().getTime() - timeStart.getTime()) % TIMEINTERVAL == 0) {
System.out.println("-----------再次挑战-----------------");
thread.startNewChallenge();
}
}
} catch (IOException e) {
e.printStackTrace();
}
}[/code]
当客户端连接上服务器端后,服务器端和客户端就各自马上启动自己的线程,此时客户端就处于监听输入流的状态即代码执行到[code="java"]receive = dis.readUTF();[/code],服务器这时马上向客户端发送一个挑战报文(挑战报文发送后,服务器端也进入到监听输入流的状态,等待客户端的相应报文),客户端接收到挑战报文后就像服务器端发送响应报文,然后服务器端接收到客户端的相应报文后,就验证客户端是否挑战成功,如果成功与否都向客户端发送响应的报文。我现在的问题是当服务器端发送挑战报文后,如果在传输的过程中报文丢失,那么客户端和服务器端此时都处于监听输入流状态,这时两边岂不都僵持在等待输入流的状态?那这个问题怎么解决?求解答,其实我这个是仿照写聊天室写的,是不是俺的思考方向错了?

  • 写回答

1条回答 默认 最新

  • iteye_7333 2010-11-30 14:12
    关注

    这是多线程通信需要解决的问题之一,就如同QQ上聊天一样,好友A看到B上线了:
    A:你好。
    B:你好。
    A:88
    B:88
    A,B下线。

    你说的情况就如同A说了“你好”,但B没有回答一样。
    A可以下线,也可以打电话去问问。

    在具体的多线程操作中,可能等一段时间退出,或者其他途径得到想要处理的数据。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 ajax服务器不能下载
  • ¥15 运用c++和opencv实现二维码的识别和三维坐标的建立
  • ¥15 k210烧入flash报错error:2005
  • ¥15 GIS土地利用预测FLUS模型
  • ¥15 visual studio code打不出来中文双引号
  • ¥20 关于#matlab#的问题:ps:完美符合要求有打赏(相关搜索:自适应)
  • ¥15 声音感应灯,问题出在哪里
  • ¥15 关于#matlab#的问题:(0,0)上的贝塞尔曲线,0)上的贝塞尔曲线,并使用自适应积分计算其从t=0到不大于1的任意值区间的弧长
  • ¥20 关于#r语言#rda分析作图的问题,请各位专家解答!
  • ¥50 找回 股票行情系统的资源问题