Форум: "Сети";
Текущий архив: 2003.09.01;
Скачать: [xml.tar.bz2];
ВнизSockets Problem Найти похожие ветки
← →
gala (2003-06-25 13:19) [0]Привет люди!!
У меня проблема: Сделала Server на Delphi, а Client на JAVA. Вроде все нормально работает, но почему то большие файлы не присылаются полностью.У меня например 9 Мб, я ево передаю через Buffer и нифига, приходит только одна страница. Не пойму в чем дело :(
Может кто уже сталкивался с етой проблемой?Причем не пойму, где проблема, в JAVA или в Delphi.
код на Delphi-Server:
procedure TForm1.Button1Click(Sender: TObject);
var
Socket : TServerSocket;
begin
Socket:=TServerSocket.Create(Form1);
Socket.ServerType := stNonBlocking;
Socket.OnClientWrite := ServerClientRead;
Socket.Port:=4000;
Socket.Active := true;
end;
procedure TForm1.ServerClientRead(Sender: TObject; Socket: TCustomWinSocket );
var
rec:String;
Begin
rec:=Socket.ReceiveText;
//...
end;
теперь Client на JAVA:
public static void main(String[] args) {
Socket con = new Socket("127.0.0.1", 4000);
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter
(con.getOutputStream())));
BufferedReader in = new BufferedReader(new InputStreamReader
(con.getInputStream() ) );
DocumentBuilderFactory factory;
DocumentBuilder builder;
Document document = null;
factory = DocumentBuilderFactory.newInstance();
builder = factory.newDocumentBuilder();
document = builder.parse("input_mainplan.xml");
Transformer transformer = TransformerFactory.newInstance().newTransformer();
DOMSource source = new DOMSource( document );
StreamResult result = new StreamResult(out);
System.out.println("Fertig2");
( source, result ) Привет люди!!
У меня проблема: Сделала Server на Delphi, а Client на JAVA. Вроде все нормально работает, но почему то большие файлы не присылаются полностью.У меня например 9 Мб, я ево передаю через Buffer и нифига, приходит только одна страница. Не пойму в чем дело :(
Может кто уже сталкивался с етой проблемой?Причем не пойму, где проблема, в JAVA или в Delphi.
код на Delphi-Server:
procedure TForm1.Button1Click(Sender: TObject);
var
Socket : TServerSocket;
begin
Socket:=TServerSocket.Create(Form1);
Socket.ServerType := stNonBlocking;
Socket.OnClientWrite := ServerClientRead;
Socket.Port:=4000;
Socket.Active := true;
end;
procedure TForm1.ServerClientRead(Sender: TObject; Socket: TCustomWinSocket );
var
rec:String;
Begin
rec:=Socket.ReceiveText;
//...
end;
теперь Client на JAVA:
public static void main(String[] args) {
Socket con = new Socket("127.0.0.1", 4000);
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter
(con.getOutputStream())));
BufferedReader in = new BufferedReader(new InputStreamReader
(con.getInputStream() ) );
DocumentBuilderFactory factory;
DocumentBuilder builder;
Document document = null;
factory = DocumentBuilderFactory.newInstance();
builder = factory.newDocumentBuilder();
document = builder.parse("input_mainplan.xml");
Transformer transformer = TransformerFactory.newInstance().newTransformer();
DOMSource source = new DOMSource( document );
StreamResult result = new StreamResult(out);
System.out.println("Fertig2");
transformer.transform( source, result );//hier wird Stream an Delphi -Server uebertragen
}
← →
Digitman (2003-06-25 14:38) [1]как вот это понимать
Socket.OnClientWrite := ServerClientRead;
?
тебе самой-то понятно, что ты в этой строчке делаешь ?
← →
gala (2003-06-25 15:08) [2]Конечно понятно,
в етой строчке говорится, что в случаи,когда Client посылает данные, надо иди в функцию ServerClientRead. Она же внизу стоит. Просто я ее так назвала, вот и не понятно некоторым. Я ее могла и по другому назвать.
Я счас переделала маленько все, сделала с Indy, но теперь другая проблема-скорость, 10 Мб черт знает сколько посылаются :(Уж и не знаю, вроде local работаю :(
← →
Digitman (2003-06-25 15:15) [3]
> в етой строчке говорится, что в случаи,когда Client посылает
> данные, надо иди в функцию ServerClientRead
хммм... ну ладно ! а зачем, по-твоему, серверу тогда нужно событие OnClientRead() ?
← →
gala (2003-06-25 15:27) [4]Да какая разница то??Главное, что он не считывает весь фаил, а только часть.Может он блоками получает файл, я ето и хочу выяснить и как сделать, чтобы я весь файл получила.
← →
Digitman (2003-06-25 15:33) [5]
> Да какая разница то??
ах вон оно что !)
разницы-то, оказывается, и нет !!!
ну-ну)
не хочешь думать вслух - ничем помочь не могу, извини.
← →
gala (2003-06-25 15:48) [6]Ну я выяснила, что сервер несколько раз в ету функцию прыгает. То-есть получается, что он блоками читает.Вот новый код:
procedure TForm1.Button1Click(Sender: TObject);
var param1,param2:String;
Socket : TServerSocket;
begin
rec := "";
Socket:=TServerSocket.Create(Form1);
Socket.OnClientRead := ServerClientRead2;
Socket.OnClientDisconnect := ServerDics;
Socket.Port:=4000;
Socket.Active := true;
end;
procedure TForm1.ServerClientRead2(Sender: TObject; Socket: TCustomWinSocket );
Begin
rec:= rec + Socket.ReceiveText;
end;
procedure TForm1.ServerDics(Sender: TObject; Socket: TCustomWinSocket);
begin
( rec) Ну я выяснила, что сервер несколько раз в ету функцию прыгает. То-есть получается, что он блоками читает.Вот новый код:
procedure TForm1.Button1Click(Sender: TObject);
var param1,param2:String;
Socket : TServerSocket;
begin
rec := "";
Socket:=TServerSocket.Create(Form1);
Socket.OnClientRead := ServerClientRead2;
Socket.OnClientDisconnect := ServerDics;
Socket.Port:=4000;
Socket.Active := true;
end;
procedure TForm1.ServerClientRead2(Sender: TObject; Socket: TCustomWinSocket );
Begin
rec:= rec + Socket.ReceiveText;
end;
procedure TForm1.ServerDics(Sender: TObject; Socket: TCustomWinSocket);
begin
test(rec);
end;
Теперь у меня другая проблема :(
Ета переменая recпочему то к моменту Disconnect пустая уже.
Хотя в функции она всегда увиличивается, я проверяла.Не одно..так другое :(
← →
gala (2003-06-25 15:53) [7]Chert,nashla oshibku...nu ya i tupik :)
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2003.09.01;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.011 c