2017-07-23 8 views
1

Erstens verzeihen Sie mir über meine schlechte Sprache.Ich schreibe eine Server-Client-Anwendung in Java und ich versuche, ein Objekt an den Server zu senden, aber ich bekomme eine Ausnahme alles aussieht wie gut ich verstehe nicht kann mir jemand helfen? Hier sind meine Codes wenn ich etwas falsch mache warnen michJava-Objekt Sendefehler in Socket-Anwendung

Server;

import java.io.IOException; 
import java.io.ObjectInputStream; 
import java.net.InetSocketAddress; 
import java.nio.channels.ServerSocketChannel; 
import java.nio.channels.SocketChannel; 

/** 
* @author MuhammedMustafa 
* 
*/ 
public class Server { 

/** 
* @param args 
* @throws IOException 
* @throws ClassNotFoundException 
*/ 
public static void main(String[] args) throws IOException, ClassNotFoundException { 
    Server server = new Server(); 
    server.ReceiveObject(); 
} 

private SocketChannel socketChannel = null; 

void ReceiveObject() throws IOException, ClassNotFoundException{ 
    System.out.println("Server Started"); 
    socketChannel = CreateSocketChannel(); 
    ObjectInputStream ois = new ObjectInputStream(socketChannel.socket().getInputStream()); 
    Person person = (Person) ois.readObject(); 
    System.out.println("Object : "+ person.toString()); 
    socketChannel.close(); 

} 
private SocketChannel CreateSocketChannel() throws IOException{ 

    ServerSocketChannel serverSocketChannel = ServerSocketChannel.open(); 
    serverSocketChannel.socket().bind(new InetSocketAddress(9100)); 
    socketChannel = serverSocketChannel.accept(); 

    System.out.println("Connection Etablished : " + socketChannel.getRemoteAddress()); 
    return socketChannel; 
} 

} 

Kunde

import java.io.IOException; 
import java.io.ObjectOutputStream; 
import java.net.InetSocketAddress; 
import java.net.SocketAddress; 
import java.nio.channels.SocketChannel; 

/** 
* @author MuhammedMustafa 
* 
*/ 
public class Client { 
boolean isConnected = false; 
private SocketChannel socketchannel; 
private ObjectOutputStream outputStream; 
public static void main(String[] args) throws IOException { 
    Client client = new Client(); 
    client.sendOject(); 
} 
/** 
* @param args 
*/ 
    SocketChannel createChannel() throws IOException {  
     SocketChannel socketChannel = SocketChannel.open(); 
     socketChannel.configureBlocking(true); 
     SocketAddress sAddr = new InetSocketAddress("127.0.0.1", 9100); 
     socketChannel.connect(sAddr); 
     return socketChannel; 
    } 
     void sendOject() throws IOException { 
      while (!isConnected) { 
       socketchannel = createChannel(); 
       isConnected = true; 
       outputStream = new 
ObjectOutputStream(socketchannel.socket().getOutputStream()); 
       Person person = new Person(15, "Hello"); 
       outputStream.writeObject(person); 

    } 
} 
} 

Objekt

import java.io.Serializable; 

public class Person implements Serializable { 
private static final long serialVersionUID = 1L; 
public Person(int i, String string) { 

} 

public int getAge() { 
    return age; 
} 

public void setAge(int age) { 
    this.age = age; 
} 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

private int age; 
private String name; 
} 

Exception

Server Started 
Connection Etablished : /127.0.0.1:57896 
Exception in thread "main" java.io.IOException: Varolan bir bağlantı 
uzaktaki bir ana bilgisayar tarafından zorla kapatıldı(An existing 
connection was forcibly closed by a remote host) 
at sun.nio.ch.SocketDispatcher.read0(Native Method) 
at sun.nio.ch.SocketDispatcher.read(Unknown Source) 
at sun.nio.ch.IOUtil.readIntoNativeBuffer(Unknown Source) 
at sun.nio.ch.IOUtil.read(Unknown Source) 
at sun.nio.ch.SocketChannelImpl.read(Unknown Source) 
at sun.nio.ch.SocketAdaptor$SocketInputStream.read(Unknown Source) 
at sun.nio.ch.ChannelInputStream.read(Unknown Source) 
at java.io.ObjectInputStream$PeekInputStream.read(Unknown Source) 
at java.io.ObjectInputStream$PeekInputStream.readFully(Unknown Source) 
at java.io.ObjectInputStream$BlockDataInputStream.readShort(Unknown Source) 
at java.io.ObjectInputStream.readStreamHeader(Unknown Source) 
at java.io.ObjectInputStream.<init>(Unknown Source) 
at Server.ReceiveObject(Server.java:32) 
at Server.main(Server.java:24) 
+0

können Sie in https://stackoverflow.com/questions/19217420/sending-an-object-through-a-socket-in-java – Akash

Antwort

0

Ihr Kunde nie die Buchse endet, so dass das Betriebssystem setzt es, wenn es austritt.

+0

Vielen Dank, es hat funktioniert, aber ich bekomme null Wert, wenn Sie hilf mir auch dabei, ich werde mich sehr freuen thx wieder – TPBAFK

+0

Helfen dir wie? Wie kann Ihnen jemand ohne Information helfen? Sie erhalten einen Nullwert für * was? * In welchem ​​Code? NB Ihr 'Personen' Konstruktor tut nichts. – EJP

+0

Ich habe diesen Code hinzugefügt \t public String toString() { \t \t zurück "Name =" + name + "; Age =" + age; \t} – TPBAFK