Java中的套接字和对象非常基本的例子

0 java sockets object

我试图在一个服务器和一个客户端之间创建一个简单的传输.我正在尝试从客户端向服务器发送一个Object.我已经多次检查了我的代码,我真的不知道为什么不起作用.此外,id喜欢添加我已经在netbeans中创建了两个单独的项目,一个用于客户端,一个用于服务器.代码如下:

客户:

package client;
import java.net.*;
import java.io.*;
import java.util.Scanner;
import java.io.Serializable;

class Object implements Serializable {  
    String one;
    String two;

    public Object(String one, String two){
        this.one = one;
        this.two = two;
    } 

    @Override
    public String toString(){
        return "\nOne: " + one +"\nTwo: " + two;
    }            

}


public class Client {  

    public static void main(String[] args){    

        try {
            Object obj= new Object ("Something", "Else");

            Socket sock = new Socket("127.0.0.1", 1111);

            ObjectOutputStream oos = new ObjectOutputStream(sock.getOutputStream());  
            System.out.println("Connecting to "+ sock.getInetAddress()+ " and port "+sock.getPort());

            System.out.println("Local Address :"+sock.getLocalAddress()+" Port:"+sock.getLocalPort());

            oos.writeObject(obj);
            oos.flush();
            oos.close();
            sock.close();
            System.out.println("Connection Closing...");

        } catch (Exception ex){
            System.out.println("No Conenction");
        } 
    } 
}
Run Code Online (Sandbox Code Playgroud)

服务器:

<!-- language: lang-java -->


package server;

import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.*;
import java.io.*;


class Object implements Serializable {  
    String one;
    String two;

    public Object(String one, String two){
        this.one = one;
        this.two = two;
    } 

    @Override
    public String toString(){
        return "\nOne: " + one +"\nTwo: " + two;
    }            

}

public class Server {
    public static void main(String[] args){
        try{
            ServerSocket server = new ServerSocket(1111,10);

            System.out.println("Waiting Incoming Connection...");

            System.out.println("Local Address :"+server.getInetAddress()+" Port:"+server.getLocalPort());

            Socket sock = server.accept();
            ObjectInputStream ois = new ObjectInputStream(sock.getInputStream());               

            Object ob=new Object ("Once", "Upon"); //for test
            Object obj2= null;
            try{
                obj2 = (Object )ois.readObject();
                System.out.println(obj2);

            }catch (Exception ex){
                 System.out.println("nothing...");
            }
            System.out.println(ob); 
            ois.close();

        }catch (Exception ex){
            System.out.println("Error during I/O");
            ex.getMessage();
            ex.printStackTrace();
        } 
    } 
} 
Run Code Online (Sandbox Code Playgroud)

代码有效,但对象永远不会发送= /.我收到的消息是"没有...",这是异常.连接有效,因为使用简单的消息BufferedReader(),BufferedWritter()可以交换消息.问题在于对象....

SJu*_*n76 6

1)不要只说"抛出一些异常".打印抛出的异常,以及where(e.printStackTrace()).

2)最有可能的是,您必须在服务器和客户端中使用相同的类.这意味着同一个包,too(client.Object)与(server.Object)不同.可能你得到了a ClassCastException).

3)请不要使用API​​中的类名来命名您的类,并且不要使用任何来自java.lang.任何名字都比Object.

更新:一些实施技巧

又脏又脏.重命名你server.Object的server.MyServer.导入client.Object.使obj2变量a client.Object.麻烦的是,要运行服务器,您需要在类路径中使用客户端代码.

更详细.mytest.Bean使用要传输的对象的定义创建第三个类(比如说).在客户端和服务器代码中使用此类(不要忘记将其添加到类路径中).

最后,当您拥有一个真正的应用程序时,您将使共享数据成为库,并将其导入服务器和客户端应用程序中.

  • +1.OP需要3个项目:1个用于客户端,1个用于服务器,1个用于由两者共享的类,其实例通过网络交换 (2认同)