A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

40黑马币
悬赏80黑马币如果解决了追加50
最近在写一个即时聊天软件,这个困扰了我几天没解决,百度查到的资料几乎为0,是我一大难题,在这里求助大神。  我就把问题这段代码发出来方便大家阅读。
希望大家代码拿过去解决了来,解决了黑马币少不了你的呵呵。

问题 我想服务器接受客户端发过来的类p,打印p中的name, 但是一执行就会报错ioexception,我在catch中加入了system打印异常不加这句还看不到异常信息,真是日了狗了,奇怪,   客户端发送类p服务器接受不到但是把客户端的oos.writeobject("wubo")直接发送字符串,服务器端又可以接受到了,看来问题就在这了,是我漏了什么么,求大神解决好了来追加黑马币

代码如下:
test1类    (这个类是服务端serversocket)
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.Serializable;
import java.net.ServerSocket;
import java.net.Socket;
class person{
        private String name;
        public String getName(){
       return name;}
  }
public class test1{
Socket client;
public test2(){
try {
        ServerSocket ss=new ServerSocket(10001);
        client=ss.accept();
        ObjectInputStream ois=new ObjectInputStream(client.getInputStream());
        person ps=(person)ois.readObject();
        System.out.println(ps.getName());}
catch (IOException e) {
        System.out.println("IOException");}
catch (ClassNotFoundException e) {
        System.out.println("ClassNotFoundException");}       
}
public static void main(String[]a){
        new test2();
}
}



test类     (这个是客户端scoket)
package test;
import java.io.IOException;
import java.io.Serializable;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
class person implements Serializable{
        private String name;
        public void setName(String name){
                this.name =name;
        }
        public String getName(){
                return name;
        }
}
public class demo {
        Socket s;
     public demo(){
        try {
            s = new Socket(InetAddress.getLocalHost().getHostAddress(),10001);
            ObjectOutputStream oos=new ObjectOutputStream(s.getOutputStream());
            person p=new person();
            p.setName("wubo");
            oos.writeObject(p);
            oos.flush();
        } catch (UnknownHostException e) {
                e.printStackTrace();
        } catch (IOException e) {
                e.printStackTrace();}
}
     public static void main(String []a){
             new demo();
     }
}




最佳答案

7 个回复

倒序浏览
boboyuwu 发表于 2015-10-7 18:34
留QQ  你这代码没改    你远程帮我搞定解决了分给你

2925739502
回复 使用道具 举报
本帖最后由 年强 于 2015-10-7 14:52 编辑

你的问题是将类p发到服务器端是吗?
已经解决了
现在没有问题
回复 使用道具 举报
年强 发表于 2015-10-7 14:49
你的问题是将类p发到服务器端是吗?
已经解决了
现在没有问题

对 发送到服务端  打印出来怎么解决的
回复 使用道具 举报
boboyuwu 发表于 2015-10-7 17:42
对 发送到服务端  打印出来怎么解决的

package Socket;

import java.io.IOException;
import java.io.Serializable;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

//客户端
public class ClientSoc {
        Socket s;
     public ClientSoc(){
        try {
            s = new Socket(InetAddress.getLocalHost().getHostAddress(),10001);
            ObjectOutputStream oos=new ObjectOutputStream(s.getOutputStream());
            person p=new person();
            p.setName("wubo");
            oos.writeObject(p);
            oos.flush();
        } catch (UnknownHostException e) {
                e.printStackTrace();
        } catch (IOException e) {
                e.printStackTrace();}
      //关闭资源。否则会导致内存溢出
        finally
            {
                    try {
                            if (s != null)
                            s.close();
                    } catch (IOException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                    }
            }
}
     public static void main(String[] args){
             new ClientSoc();
     }
}

class person implements Serializable{
    private String name;
    public void setName(String name){
            this.name =name;
    }
    public String getName(){
            return name;
    }
}


//服务器端

package Socket;

import java.io.*;
import java.net.*;

public class ServerSoc{
Socket client;
ServerSocket ss;
public ServerSoc(){
        try {
                 ss=new ServerSocket(10001);
               
                client=ss.accept();
                ObjectInputStream ois=new ObjectInputStream(client.getInputStream());
                person ps=(person)ois.readObject();
                System.out.println(ps.getName());}
        catch (IOException e) {
                System.out.println("IOException");}
        catch (ClassNotFoundException e) {
                System.out.println("ClassNotFoundException");}
        //关闭资源
        finally
        {
                try {
                        if (ss != null)
                        ss.close();
                } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
        }
}
public static void main(String[] args){
        new ServerSoc();
}
}
//class person1{
//    private String name;
//    public String getName(){
//            name = this.name;
//   return name;}
//}

回复 使用道具 举报
年强 发表于 2015-10-7 17:54
package Socket;

import java.io.IOException;

要记住关闭资源。。。否则端口占用
回复 使用道具 举报
年强 中级黑马 2015-10-7 17:58:29
7#
boboyuwu 发表于 2015-10-7 17:42
对 发送到服务端  打印出来怎么解决的

要记住关闭资源。。。否则端口被占用
回复 使用道具 举报
年强 发表于 2015-10-7 17:58
要记住关闭资源。。。否则端口被占用

留QQ  你这代码没改    你远程帮我搞定解决了分给你
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马