Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

ObjectInputStream zablokira problem

[es] :: Java :: ObjectInputStream zablokira problem

[ Pregleda: 1399 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

prljevics
Student
Novi Sad

Član broj: 229014
Poruke: 3
93.86.126.*



Profil

icon ObjectInputStream zablokira problem28.07.2009. u 21:06 - pre 179 meseci
Pravim klijent-server aplikaciju. Server treba da mi salje objekte koje klijent prima i iscitava podatke iz njega. Medjutim kada pokrenem server on radi sve ok, zatim pokrenem klijenta i on mi se zapuca pri kreiranju ObjectInputStream-a. nije mi jasno zasto, dok server normalno radi ??? Ako neko ima ideju molim za pomoc :)

client:

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

public class UserClient {

public static final int TCP_PORT = 9000;


public static void main(String[] args) {
String hostname = "localhost";
try {
InetAddress addr = InetAddress.getByName(hostname);

Socket sock = new Socket(addr, TCP_PORT);

ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(sock.getInputStream())); // na ovoj liniji mi se zapuca
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(sock.getOutputStream())), true);

BufferedReader unos = new BufferedReader(new InputStreamReader(System.in));
String s = "";
while(true)
{
... // tu radi nesto
}

in.close();
out.close();
sock.close();
} catch (UnknownHostException e1) {
e1.printStackTrace();
} catch (IOException e2) {
e2.printStackTrace();
}
}
}



server:

import java.net.ServerSocket;
import java.net.Socket;

public class UserServer {

public static int TCP_IP=9000;

public static void main(String args[])
{
try{
ServerSocket ss = new ServerSocket(TCP_IP);
Biblioteka bb = new Biblioteka();

System.out.println("Server running ...");
while(true)
{
Socket sock = ss.accept();

UserServerThread st= new UserServerThread(sock,bb);

}
}catch(Exception ex)
{
ex.printStackTrace();
}
}
}



UserServerThread:

import java.io.*;
import java.net.*;
import java.util.Vector;

public class UserServerThread extends Thread{

private Socket sock;
private BufferedReader in;
private ObjectOutputStream out;
private boolean signedIn;
private Biblioteka biblioteka;

public UserServerThread(Socket sock, Biblioteka biblioteka)
{
this.sock=sock;
this.biblioteka=biblioteka;
signedIn=false;

System.out.println("New thread created");
try {
in = new BufferedReader(new InputStreamReader(sock.getInputStream()));
out = new ObjectOutputStream(new BufferedOutputStream(sock.getOutputStream()));

start();
} catch (IOException e) {
e.printStackTrace();
}
}

public void run()
{
try{
System.out.println("thread started");
while(true)
{
...
}
in.close();
out.close();
sock.close();
}catch(Exception ex){
ex.printStackTrace();
}
}
}

 
Odgovor na temu

Dejan Lozanovic
Dejan Lozanovic
Beograd

Član broj: 691
Poruke: 2325
91.148.87.*

Jabber: null@elitesecurity.org
Sajt: speedy-order.com


+75 Profil

icon Re: ObjectInputStream zablokira problem29.07.2009. u 07:05 - pre 179 meseci
Code:

ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(sock.getInputStream()));


vidim ja da je ovde bio izgleda neki copy /paste. Izbaci onaj BufferedInputStream on zakoci bar u pocetku sigurno. posto dok ne napuni odredjeni buffer on ne pusta dalje, druga stvar skini buffered Input/output sa svih socketa. trece svaki put kad pises na neki socket uradi flush. cak i posle pravljenja ObjectOutputStream-a. Ako pokusas da napravis ObjectOutPutStream nad fajlom recimo videces da on napravi na pocetku nekoliko bajtova, e tih nekoliko bajtova ObjectInputStream ocekuje kod inicijalizacije, i kako ne moze nikako da ih procita jer recimo BufferedInputStream koci jer to cuva u bufferu tebi program ceka.
 
Odgovor na temu

prljevics
Student
Novi Sad

Član broj: 229014
Poruke: 3
93.86.126.*



Profil

icon Re: ObjectInputStream zablokira problem29.07.2009. u 08:43 - pre 179 meseci
Hvala, kad sam sklonio BufferedInput/OutputStream radi:)
 
Odgovor na temu

river
System Architect

Član broj: 12566
Poruke: 62
*.com
Via: [es] mailing liste



+1 Profil

icon Re: ObjectInputStream zablokira problem29.07.2009. u 21:30 - pre 179 meseci
@DejanL - Deki, nemoj da savetujes ljude da ne koriste
BufferedInputStream, on ne blokira nikad, niti ceka da se napuni buffer.

@prljevics - Iako si dobio pogresan savet u vezi BufferedInputStream-
a, dobio si i jedan dobar savet u vezi flushovanja
BufferedOutputStream-a.

Ono sto se dogodilo ako si imao BufferedOutputStream, je da je on
cekao da se napuni buffer pre nego je "poslao" podatke kroz socket.

Znaci ispravno bi bilo da koristis Buffered*Stream-ove sa obe strane,
ali da obavezno flush-ujes stranu na kojoj pises.

P.S. 2 centa za one koji veruju u pricu da BIS blokira dok ne napuni
socket, probajte da testirate performanse sa i bez buffer-a.

Pozdrav
--Apple-Mail-3-9294669
Content-Disposition: attachment;
filename=smime.p7s
Content-Type: application/pkcs7-signature;
name=smime.p7s
Content-Transfer-Encoding: base64

MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAoIIGJTCCAt4w
ggJHoAMCAQICEDCoLy8l0o622P9edaHI85EwDQYJKoZIhvcNAQEFBQAwYjELMAkGA1UEBhMCWkEx
JTAjBgNVBAoTHFRoYXd0ZSBDb25zdWx0aW5nIChQdHkpIEx0ZC4xLDAqBgNVBAMTI1RoYXd0ZSBQ
ZXJzb25hbCBGcmVlbWFpbCBJc3N1aW5nIENBMB4XDTA5MDYxNDAyMTkyMVoXDTEwMDYxNDAyMTky
MVowRDEfMB0GA1UEAxMWVGhhd3RlIEZyZWVtYWlsIE1lbWJlcjEhMB8GCSqGSIb3DQEJARYSaXJl
a292aWNAZ21haWwuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA49OC6Y/CCfXL
RfBu1PGYvNRCZcvT2FVh2shPJMNJMDlfxCeo3Qt/S+cNN0i2fjibfMwCEt4fjrLvfo+uWiNxxiiU
J0trlKxRaFoZ5xUTiF1qC90HYKBRYk4Fsd/UNoysSAkMUg8JydOgwYipDHUiXzL+ZDckSLNlm+tp
g+7cCNtyhsppuGaVGAeCvI/OQw6yaVQTQ3cHZk7F6FNrtJoIUfIxLrYFAOl37GDgXd3PY5zKvYo5
XyyxMTXNHHI+vOsPDuiPW33CFW0bKam7vadTYHt0hAVBixSZQiU6h1S+H/Dhzxk5HezDX+LG2K6D
bJaTSr2LhE3eNOb0RSlpzbGByQIDAQABoy8wLTAdBgNVHREEFjAUgRJpcmVrb3ZpY0BnbWFpbC5j
b20wDAYDVR0TAQH/BAIwADANBgkqhkiG9w0BAQUFAAOBgQAGu5yhKH6BXjYcZZ4PzFwnAtYF3uWM
wtJ+Ia7MEJ1S0mMs9nrVb/lFdfLv9YnRSle22Q85CXrspS55DaFaEJ4BlCkUXXAlZcMduOHKW8oN
iXmrJ5HbuKHr8ik8SJsz9PQbn+ecb0jnBzFfZnZasTb2HSQDQX2DzMgL9uVRwskKcjCCAz8wggKo
oAMCAQICAQ0wDQYJKoZIhvcNAQEFBQAwgdExCzAJBgNVBAYTAlpBMRUwEwYDVQQIEwxXZXN0ZXJu
IENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEaMBgGA1UEChMRVGhhd3RlIENvbnN1bHRpbmcxKDAm
BgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2aXNpb24xJDAiBgNVBAMTG1RoYXd0ZSBQ
ZXJzb25hbCBGcmVlbWFpbCBDQTErMCkGCSqGSIb3DQEJARYccGVyc29uYWwtZnJlZW1haWxAdGhh
d3RlLmNvbTAeFw0wMzA3MTcwMDAwMDBaFw0xMzA3MTYyMzU5NTlaMGIxCzAJBgNVBAYTAlpBMSUw
IwYDVQQKExxUaGF3dGUgQ29uc3VsdGluZyAoUHR5KSBMdGQuMSwwKgYDVQQDEyNUaGF3dGUgUGVy
c29uYWwgRnJlZW1haWwgSXNzdWluZyBDQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAxKY8
VXNV+065yplaHmjAdQRwnd/p/6Me7L3N9VvyGna9fww6YfK/Uc4B1OVQCjDXAmNaLIkVcI7dyfAr
hVqqP3FWy688Cwfn8R+RNiQqE88r1fOCdz0Dviv+uxg+B79AgAJk16emu59l0cUqVIUPSAR/p7bR
PGEEQB5kGXJgt/sCAwEAAaOBlDCBkTASBgNVHRMBAf8ECDAGAQH/AgEAMEMGA1UdHwQ8MDowOKA2
oDSGMmh0dHA6Ly9jcmwudGhhd3RlLmNvbS9UaGF3dGVQZXJzb25hbEZyZWVtYWlsQ0EuY3JsMAsG
A1UdDwQEAwIBBjApBgNVHREEIjAgpB4wHDEaMBgGA1UEAxMRUHJpdmF0ZUxhYmVsMi0xMzgwDQYJ
KoZIhvcNAQEFBQADgYEASIzRUIPqCy7MDaNmrGcPf6+svsIXoUOWlJ1/TCG4+DYfqi2fNi/A9BxQ
IJNwPP2t4WFiw9k6GX6EsZkbAMUaC4J0niVQlGLH2ydxVyWN3amcOY6MIE9lX5Xa9/eH1sYITq72
6jTlEBpbNU1341YheILcIRk13iSx0x1G/11fZU8xggMQMIIDDAIBATB2MGIxCzAJBgNVBAYTAlpB
MSUwIwYDVQQKExxUaGF3dGUgQ29uc3VsdGluZyAoUHR5KSBMdGQuMSwwKgYDVQQDEyNUaGF3dGUg
UGVyc29uYWwgRnJlZW1haWwgSXNzdWluZyBDQQIQMKgvLyXSjrbY/151ocjzkTAJBgUrDgMCGgUA
oIIBbzAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEPFw0wOTA3MjkyMDMw
MzRaMCMGCSqGSIb3DQEJBDEWBBTWgFSRProxmKN2v8NmqWVoAJK1UzCBhQYJKwYBBAGCNxAEMXgw
djBiMQswCQYDVQQGEwJaQTElMCMGA1UEChMcVGhhd3RlIENvbnN1bHRpbmcgKFB0eSkgTHRkLjEs
MCoGA1UEAxMjVGhhd3RlIFBlcnNvbmFsIEZyZWVtYWlsIElzc3VpbmcgQ0ECEDCoLy8l0o622P9e
daHI85EwgYcGCyqGSIb3DQEJEAILMXigdjBiMQswCQYDVQQGEwJaQTElMCMGA1UEChMcVGhhd3Rl
IENvbnN1bHRpbmcgKFB0eSkgTHRkLjEsMCoGA1UEAxMjVGhhd3RlIFBlcnNvbmFsIEZyZWVtYWls
IElzc3VpbmcgQ0ECEDCoLy8l0o622P9edaHI85EwDQYJKoZIhvcNAQEBBQAEggEAuPSiwyrfbsRV
m9wRB58L/6c9wXob4N8ZQSHBepiF/nRT3CvtvQ+QrVuLDjD/zoWrhofa6fNAw4sXr4rLZW0Nm84h
m9TuSm3d81+BZdVFm7n/sGukMrr88Gz5hgdvdyoBp/Y+val3Q2K8xzVGZRqlx2bgMmCU6UdbAzjR
ClodIZ8x6Mi/8g973KfjHuaRDxMRiNiM7YioP2eUZNNCz6IeOsTjdLr09u1Q9FJr6hCekhNzUI/6
/yyzi4DJal//TLXwCsBAOorlbulOxX0WqnPxp66V8YFI8WFv3yktoZGvdQIyRp2LnfZCfa1VNWah
ReUwjI+M6nuIHEhhq9hFDL1dGgAAAAAAAA=
--Apple-Mail-3-9294669--
Everything should be made as simple as possible, but not simpler. - AA
 
Odgovor na temu

[es] :: Java :: ObjectInputStream zablokira problem

[ Pregleda: 1399 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.