| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1068 人关注过本帖
标题:Java网络TankServer端抛错!java.io.EOFException
只看楼主 加入收藏
sdg430
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2010-5-17
结帖率:66.67%
收藏
已结贴  问题点数:10 回复次数:4 
Java网络TankServer端抛错!java.io.EOFException
TankWar1.8.2.rar (18.27 KB)


我这里在做一个用Java写的坦克大战的练习,写这个网络版时,我的Server要保存客户端的UdpPort,
可在起了server后,提示int udpPort = dis.readInt();这里抛异常,可我后面不是已经都catch了,怎么还会有这个异常,代码如下


while(true) {
   Socket s =null;
   try {
    s = ss.accept();
    DataInputStream dis = new DataInputStream(s.getInputStream());
    int udpPort = dis.readInt();
    String IP = s.getInetAddress().getHostAddress();
    Client c = new Client(IP,udpPort);
    clients.add(c);
    System.out.println(" a Client Connect : Addr:" + s.getInetAddress() + "PORT:" + s.getPort() + "udpPort:" +udpPort);
   }catch(EOFException  e){
    e.printStackTrace();
   }catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }finally{
    if(s!=null)
     try {
      s.close();
      s = null;
     }catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
     }
   }
  }
 
就在那一句那个地方 catch,结果还是抛错!我在想是不是我readInt用的有问题啊?
我的客户端从服务器收到的信息是正确的

        at (Unknown Source)
        at TankServer.start(TankServer.java:31)
        at TankServer.main(TankServer.java:60)
我把整个源码传到附近了,忘高手帮我看下,麻烦各位了!就是起了TankServer后,再起TankClient后server端就抛出上面的那个错误
搜索更多相关主题的帖子: 网络 java Java EOFException TankServer 
2010-11-17 18:42
sdg430
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2010-5-17
收藏
得分:0 
咋就没人呢!
2010-11-17 19:47
sdg430
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2010-5-17
收藏
得分:0 
仍未解决!求啊!
2010-11-18 10:55
linjx0123
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:279
专家分:1362
注 册:2006-4-7
收藏
得分:7 
s = ss.accept();
这个是接收客户端的输入流。而程序中客户端没有往输入流中输入信息。
dis.readInt();
这个是连续调用4次dis.read(),因为dis中没有信息,所以read()返回-1.因此抛出EOFException。

while(true) {
   Socket s =null;
   try {
    s = ss.accept();
    int udpPort = s.getLocalPort();
    String IP = s.getInetAddress().getHostAddress();
    Client c = new Client(IP,udpPort);
    clients.add(c);
    System.out.println(" a Client Connect : Addr:" + s.getInetAddress() + "PORT:" + s.getPort() + "udpPort:" +udpPort);
   }catch(EOFException  e){
    e.printStackTrace();
   }catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }finally{
    if(s!=null)
     try {
      s.close();
      s = null;
     }catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
     }
   }
  }

2010-11-18 13:19
sdg430
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2010-5-17
收藏
得分:0 
回复 4楼 linjx0123
在我的NetClient中是对TankClient的操作,我写入了udpPort啊!在TankServer中s.readInt()应该有内容的吧?


//实现关于TankClient的所有网络操作
public class NetClient {
    private static int UDP_PORT_START = 2223;
    private int udpPort;
   
    public NetClient() {
        udpPort = UDP_PORT_START++;
    }
   
    public void connect(String IP, int port){
        Socket s =null;
        try{
            s = new Socket(IP, port);
            DataOutputStream dos = new DataOutputStream(s.getOutputStream());
            dos.write(udpPort);
        
            System.out.println(" connect all ");

        }catch (UnknownHostException e){
            e.printStackTrace();
        }catch (IOException e){
            e.printStackTrace();
        }finally{
            if(s!=null)
            try {
                s.close();
                s = null;
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}
2010-11-18 14:39
快速回复:Java网络TankServer端抛错!java.io.EOFException
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033152 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved