الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف أرسل بيانات على شكل Object إلى Server , ومحاولة اسقبالها من جديد

مغلق
بدأه MKSoft في 29 مارس 2007 · 3 رد · 804 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته ..

لقد أنشأت برنامج بسيط Client - Server , حيث أن Client يقوم بإرسال بيانات شخص Person إلى Server .

Server يستقبل هذا Object من نوع Person ويرسله مرة أخرى إلى Client , لذلك من المفترض أن يقوم Client الأن باستقبال هذه البيانات و يقوم بطباعة محتوى Person .. لكن للأسف هذا لم يحدث ولا أدري ما السبب .. إليكم الكود .

Class Person

public class Person {
	int id;
	String name;
	public Person(int _id,String _name){
		id=_id;
		name=_name;
}}

Class Server

import java.net.*;
import java.io.*;
public class TCPServer {
public static void main (String args[]) {
try{
int serverPort = 7896;
ServerSocket listenSocket = new ServerSocket(serverPort);
while(true) {
Socket clientSocket = listenSocket.accept();
Connection c = new Connection(clientSocket);
}
} 
catch(IOException e) {System.out.println("Listen :"+e.getMessage());}
}}

Class Connection

ملاحظة : يقوم هذا الصنف بعمل مجموعة من Threads لعملية الاتصال بين Server و Client .

import java.net.*;
import java.io.*;
class Connection extends Thread {
ObjectInputStream in;
ObjectOutputStream out;
Socket clientSocket;
public Connection (Socket aClientSocket) {
try {
clientSocket = aClientSocket;
in = new ObjectInputStream( clientSocket.getInputStream());
out =new ObjectOutputStream( clientSocket.getOutputStream());
this.start();
} 
catch(IOException e) 
{System.out.println("Connection:"+e.getMessage());}
}
public void run(){
try {
Object data = in.readObject();
out.writeObject(data);
} 
catch (ClassNotFoundException e){
System.out.println("Class:"+e.getMessage());
}
catch(EOFException e) 
{System.out.println("EOF:"+e.getMessage());} 
catch(IOException e) 
{System.out.println("IO:"+e.getMessage());}
finally{ 
try {clientSocket.close();}
catch (IOException e){}}
}}

Class Client

import java.net.*;
import java.io.*;
public class TCPClient {
public static void main (String args[]) {
Socket s = null;
try{
int serverPort = 7896;
s = new Socket(InetAddress.getLocalHost(), serverPort);
ObjectInputStream in = new ObjectInputStream( s.getInputStream());
ObjectOutputStream out =new ObjectOutputStream( s.getOutputStream());
String name="Mohamed";
int id=100;
//قمنا بعمل اوبجيكت  للشخص
Person p =new Person(id,name);
//قمنا بإرسال البيانات على شكل أوبجيكت إلى سيرفر
out.writeObject(p);
Person data = (Person)in.readObject();
//من المفترض أن تقوم هذه الجملة بطباعة البيانات القادمة من سيرفر
System.out.println("Received: "+ data.name+"\t"+data.id);
}
catch (ClassNotFoundException e){
System.out.println("Class:"+e.getMessage());
}
catch (UnknownHostException e){
System.out.println("Sock:"+e.getMessage());
}
catch (EOFException e){
System.out.println("EOF:"+e.getMessage());
}
catch (IOException e){
System.out.println("IO:"+e.getMessage());}
finally {if(s!=null) try {s.close();}
catch (IOException e)
{System.out.println("close:"+e.getMessage());}
}}}
#2

يااه ذكررتني بمشروعي

لابد ان تجعل الاوبجكت المراد إرساله Serializable

out.write هذه المثد لابد ان ترسل Serialized Object

class Person implements Serializable

ابحث عن Serialized Object في المنتدى وفي قوقل

اتذكر بان هناك مقاله في developer.java جميله وبسيطه

#3

السلام عليكم ورحمة الله وبركاته

اخى mksoft صحيح كلام اخونا عيسى حيث يعتبر Serializable بمتابة flag يعنى no body

ولكن انتا بتعطيه datapayerment المطلوب ارسالها

وبتالى تكون data على شكل stream مرسلة

وشكراااا.................

تم تعديل هذه المشاركة بواسطة silmi في 4 أبريل 2007 في 21:48

#4

السلام عليكم ورحمة الله وبركاته

اخى mksoft اجعل class object implements Serializable هاستخدام بدخله دوال الاعطاء والاستدعاء

م

ما يسميا ب get && set method

import java.io.*;
import java.util.*;

public class Person implements Serializable {

   private int PersonId;
   private String PersonName;

   Person(int id, String name) {
	  PersonId = id;
	  PersonName= name;
   }

	public int getPersonId() {
	  return PersonId;
   }

   public void setPersonId(int id) {
	  PersonId = id;
   }

   public String getPersonName() {
	  return PersonName;
   }

   public void setPersonName(String name) {
	   PersonName= name;
   }
}
]

وبعد هيك اعمل ما يسمى downcasting لل class Person داخل class connection هيك يعنى

import java.io.*;
import java.net.*;
public class Connection extends Thread {
 ObjectInputStream in;
 ObjectOutputStream out;
 Socket clientSocket;
 Person p;
 public Connection(Socket aClientSocket){
 	try{
 		clientSocket=aClientSocket;
 		in=new ObjectInputStream(clientSocket.getInputStream());
 		out=new ObjectOutputStream(clientSocket.getOutputStream());
 		this.start();
	   }
 	catch(IOException e)
 	{
 		System.out.println("Connection: "+e.getMessage());
 	}
  }



   public void run(){
   	try
   		{
   	   p = (Person )in.readObject();

		 p.setPersonId(2000);
		 p.setPersonName("salah");

		 out.writeObject(p);
		// System.out.println(in.readLine().toString());
		 in.close();
		 out.close();
   		}
   	catch(EOFException e){System.out.println("EOF:"+e.getMessage());}
   	catch(IOException e){System.out.println("IO:"+e.getMessage());}
   	catch (ClassNotFoundException e){System.out.println("ClassNotFound:"+e.getMessage());}
   	catch(NullPointerException e){System.out.println("Pointer:"+e.getMessage());}
   /*	catch(Exception e) {System.out.println("details: "+e.getMessage());}*/
   finally
   	{
   	try{
   		clientSocket.close();
   		}
   	catch(IOException e)
   	{System.out.println("IO:"+e.getMessage());}
	}
}
}
]

وايضا ب class client اعطى قيم وخد هيك يعنى

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

public class TCPClient {

   public static void main(String[] arg) {
   	Socket s=null;
   	ObjectOutputStream out=null;
   	ObjectInputStream in=null;
	  try {
		 Person p = new Person(2135, "silmi");
		 System.out.println("\nData before Received");
		 System.out.println("PersonId= "+ p.getPersonId());
		 System.out.println("PersonName= " +p.getPersonName());
		 int serverPort=7896;
		 s = new Socket(/*"127.0.0.1"*/InetAddress.getLocalHost(),serverPort);
		 out= new ObjectOutputStream(s.getOutputStream());
		 in = new ObjectInputStream(s.getInputStream());
		 System.out.println("\nData after Received");
		 out.writeObject(p);
		 p= (Person)in.readObject();
	//	 out.writeBytes("Data Received...\n");
		 System.out.println("PersonId= "+ p.getPersonId());
		 System.out.println("employeeName= "+ p.getPersonName());
	  }
	  catch (UnknownHostException e){System.out.println("Sock:"+e.getMessage());}
	  catch (EOFException e){System.out.println("EOF:"+e.getMessage());}
	  catch (IOException e){System.out.println("IO:"+e.getMessage());}
	  catch (ClassNotFoundException e){System.out.println("ClassPerson:"+e.getMessage());}

	  catch(Exception e){System.out.println(e.getMessage());}

	  finally{if(s!=null)
		  try{
			  s.close();
			  out.close();
			  in.close();
			  }
			  catch(IOException e){System.out.println("Close:"+e.getMessage());
	  }
	  }

   }
}
[

وهدا class server

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

public class TCPServer {

   public static void main(String[] arg) {

	  try {
		  int severPort=7896;
		ServerSocket listenSocket=new ServerSocket(severPort);
		 while(true){
		 System.out.println("Server Waiting");
		 Socket clientSocket = listenSocket.accept();
		 Connection c=new Connection(clientSocket);
		 }

	  }  catch(IOException e) {System.out.println("Listen: "+e.getMessage()); 
	  }
   }

واى مساعدة انا مستعد اخى

وشكرا.........

هذا الموضوع مغلق.

مواضيع مشابهة