Java socket: Pending written data

HI
If I open socket a connection to a server then write some data to it's outputstream then close it immediately after, am I guaranteed the data will be delivered before the underlying connection is closed?
String data = "hello!";
Socket s = new Socket("yahoo.com",80);
s.getOutputStream().write(data.getBytes());
s.close()Is the server guaranteed to receive hello?
Thanks,
Mike

am I guaranteed the data will be delivered before the underlying connection is closed?No.
Is the server guaranteed to receive hello?If it can be delivered at all it will be delivered. But socket writes and closes are asynchronous.

Similar Messages

  • Problem while reading data on java socket

    Hi All,
    I am in big problem based on java socket programming. I run my application and start a ServerSocket on 10000(suppose) port no.As soon as request is coming i create a new thread with Socket assigned to it and process the request. Now i got the response and written on same Socket(Listen to ServerSocket on 10000 port). Now what i want to read the response written earlier on Socket.The written response i print on SOP it is visible. But when i establish InputStream and try to read the data it gives me -1 means no data is available. But i have seen the SOP and data is written to socket. How can solve the problem. I have tried after close the Socket as well as not close the socket.
    Please help me out on this.see below code
    <CODE>
    void upperClassMethod() {
    istener = new ServerSocket(port);
    while(true) {
    clientSocket = listener.accept();
    doComms conn_c= new doComms(clientSocket);
    Thread t = new Thread(conn_c);
    t.start();
    //doComms is a inner class of upper level class
    class doComms implements Runnable {
              private Socket server;
              doComms(Socket server) {
                   //pp = server;
                   this.server=server;
                   //server=server1;
    void processResponse() {
              try {
                   BufferedInputStream in = new BufferedInputStream (clientSocket.getInputStream());
                   byte [] inBuff = new byte [4096] ;
                   int len = in.read (inBuff, 0, inBuff.length) ;
                   String output = new String (inBuff) ;
                   System.out.println("the output is :::: "+output);
              } catch(Exception e) {
                   e.printStackTrace();
    </CODE>
    in processResponse() method i am not able to get output. Plz help me guys.....
    Thanks in advance for ant assistance
    Regards,
    Pradeep

    please see mu rum nethos of doComms class
    <CODE>
    public void run () {
                   input="";
                   boolean done = false ;
                   try {
                        BufferedInputStream in = new BufferedInputStream (server.getInputStream());
                        out = new PrintStream(server.getOutputStream());
                        while (!done) {
                             byte [] inBuff = new byte [4096] ;
                             try {
                                  int len = in.read (inBuff, 0, inBuff.length) ;
                                  if (len > 0) {
                                       input = new String (inBuff) ;
                                       Runnable r = new RequestProcessThread();
                                       Thread t = new Thread(r);
                                       t.start();
                                  } else if (len == -1) {
                                       done = true ;
                                       //server.close () ;
                             catch (InterruptedIOException iioe) {
                   } catch (IOException ioe) {
                        System.out.println("IOException " + ioe + " on socket in thread: " + Thread.currentThread().getName());
                        ioe.printStackTrace();
                        done = true ;
    </CODE>

  • Transferin Huge data via Java sockets! Problematic!

    Hello!
    I tried to write a server app in Java to get huge data which contains a meta data XML format about file information and then binary data of file...
    I get data from socket with DataInputStream and then I read like this:
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    while((got = in.read(res)) != -1)
    out.write(res, 0, got);
    byte[] recieved = out.toByteArray();
    I saw that if I store all receiving data in array it takes alot of memory and I cannot even transfer files which have 650MB of data.
    So I decided to write what I get from socket directly to a file...
    I used FileOutputStream to do it...
    But problem is -> THIS SERVER IS SO SLOW!
    I wrote similar code in VB6... And it receives data from client SO SO SO faster than Java...
    What's wrong with my code which makes works slow?
    how can I solve it?
    You experts have any server code example for receiving huge amount of data?
    Please advice...
    Thanks alot

    How to use buffered streams: go to Java tutorials http://java.sun.com/docs/books/tutorial/index.html - look for "basic input/output", and "buffered streams" under it. You'll want BufferedInputStream and BufferedOutputStream.
    Alternatively:
            byte buf = new byte[8192];
            while (true) {
                int count = in.read(buf);
                if (count == -1)
                    break;
                out.write(buf, 0, count);
            }If at all possible, don't read the whole file into memory at once. Read with a loop like the above and do whatever you are supposed to do with the data a chunk at a time. But if you must have it in memory then I guess you got to do what you got to do.

  • Java socket not handling the data packets properly

    I have created a small webserver application where i am receiving http requests from a siebel client. I am using content-length parameter to read the complete data in a buffer string using the command inputstreamreader.read. It works fine in all the cases, except when its used with a firewall. Some times the firewall splits a message into 2 and my logic fails as it doesn't find as many characters in the first packet as mentioned in the content length.
    My question is , how can i take care of these scenarios where a firewall is splitting the messages into multiple packets. why the java socket class is not handling the merging of these packets?
    any pointers are welcome.
    thanks

    Because that's the way TCP/IP works. read() gives you the data it can, and tells you how much was actually read. It's up to the application to reconstruct the application-level object. You could do something like this:    byte[] content = new byte[contentLen];
        int offset = 0;
        int remaining = contentLen;
        int currBytesRead = 0;
        while (remaining > 0 && currBytesRead != -1) {
          int currBytesRead = mySocketInputStream.read(content, offset, remaining);
          remaining -= currBytesRead;
          offset += currBytesRead;
        } (Warning: that's off the top of my head, uncompiled and untested. Use for demonstration purposes only!)
    Grant

  • Using plain Java Sockets(not RMI) how..?

    hi!
    1. Using plain Java Sockets(not RMI) how can the client detect when its server
    goes down?
    There is a long time interval between client requests and the client wants
    to retain a live connection rather than disconnect after every reqest.
    Please also cc your reply to [email protected]
    Thanks,
    \Raghu

    If you try to send data when the host is gone, it throws an exception. I don'thow to check if it is alive though. I'm having the same problem right now.

  • Java socket - unsure road to take!

    Hi all,
    We have an application requiring data transfer from a JSP Web application (socket client) and a stand-alone java application (socket server).
    This java stand-alone app communicates to an industrial microcontroller connected to the RS-232 serial port.
    When this java apps received a command from the JSP web app, it cannot service any other command from other uses, since there is just one RS-232 serial port on the computer. We would like to rely on the java & network environment to buffer additional commands receive simultaneously, as opposed to write code on the java socket server to handle this. In other works, our java stand-alone operates in an assynchronous, single-task mode.
    We are unsure which approach to take as far as java socket goes:
    1) simple socket server/client;
    2) multithread socket
    3) pooled
    Can anyone advise us.
    Thank you
    Trajano

    Hi Pete,
    1) Yes, we can have more than one user trying to access the micro-controllers, because we have in reality a network of micro-controllers connected to the single RS-232 computer port via a RS-485 to RS-232 converter;
    2) If a second user tries to issue a command to micro-controller, I would prefer for the java socket/environment to take care of the buffering, by just delaying the response, until the first user gets its command serviced
    3) If there is 1 user, him/her might issue several commands at the same time, by opening several JSP pages;
    4) No the controllers can service any instruction coming up at any time. The protocol is master/slave. The java app issues a request and the micro-controlle replies back and ready to accept any other request.
    ISSUE: My preference is for the system to take care of commands arriving at the socket server.
    This java app has two threads:
    1) Thread1 is the java socket server and upon receiving a command it will update three (3) properties:
    micro-controller address, command and product code
    2) Thread32 will be responsible for polling the 3 properties to check if they've changed. Upon detecting a change, it will build the data string and send to the RS-232 serial port.
    Any ideas/suggestions.
    Thanks in advance for any assistance.
    Regards

  • Java socket streams messing up

    iv wrote a games server and it uses java socket streams to send the messages back and forth between the game clients and the game server it self
    this all works great but when running and over about 5min its send over 1000 packets BUT
    it will crash iv found the reason is down to when reading the packets my parser is reading wrong part and grabbing a String part when it should be a INT
    now it should NEVER be reading this part of the packet so i put a trace on the packets coming in and ran it every packet was been read in perfect THEN just befor the crash TWO packets were merged together stright out from the socket stream this is y my packet reader was getting confused
    what im asking is can this happen in java sockets ? i thought they were bufferered so no matter how fast you send data it would always read it out in the same order ?? not sure how its merging these to packets
    is this possible of is my reader got an error in it altho works 95% of the time ??

    or do you have multiple buffered streams created from the same socket?

  • Can't connect java socket server in MAC OS

    Does any know what settings need to be done in order to connect socket server written in java on MACOS.
    my socket server is running on 5000 port, i've tried on running server on linux, and my program is able to receive the request from remote unix server.
    but when the server is running on mac OS, the the unix server couldn' connect to the socket.
    is this a port blocking problem?
    can someone tell me what to do to make server on MAC OS available for receiving request?
    Thanks

    Who is the sys/net admin for the Mac?

  • Socket AS3 ( Receive File .TXT ) + Java Socket

    Hi,
    I have Java Socket sending .TXT file ( 10 MB ) . But the AS3 only gets 63 Kb . I do not understand the loss of bytes ...
    Souce Java :
    public void sendFile(String fileName) {
            try {
                //handle file read
                File myFile = new File(fileName);
                byte[] mybytearray = new byte[(int) myFile.length()];
                FileInputStream fis = new FileInputStream(myFile);
                BufferedInputStream bis = new BufferedInputStream(fis);
                DataInputStream dis = new DataInputStream(bis);
                dis.readFully(mybytearray, 0, mybytearray.length);
                OutputStream os = clientSocket.getOutputStream();
                byte[] fileSize = intToByte(mybytearray.length);
                byte[] clientData = new byte[(int) myFile.length() + mybytearray.length];
                System.arraycopy(fileSize, 0, clientData, 0, fileSize.length); // Copy to the file size byte array to the sending array (clientData) beginning the in the 0 index
                System.arraycopy(mybytearray, 0, clientData, 4, mybytearray.length); // Copy to the file data byte array to the sending array (clientData) beginning the in the 4 index
                DataOutputStream dos = new DataOutputStream(os);
                //dos.writeUTF(myFile.getName());
                //dos.writeInt(mybytearray.length);
                dos.write(clientData, 0, clientData.length);
                dos.flush();
    AS3 Source..
    private function onResponse(e:ProgressEvent):void {
      var file:File;
      var fs:FileStream;
      var fileData:ByteArray = new ByteArray();
      file = File.documentsDirectory.resolvePath("tmpReceive.txt");
      fs = new FileStream();
      fs.addEventListener(Event.CLOSE,onCloseFileReceive);
    if(_socket.bytesAvailable > 0) {
      while(_socket.bytesAvailable) {
      // read the socket data into the fileData
      _socket.readBytes(fileData,0,0);
      fs.open(file, FileMode.WRITE);
      // Writing the file
      fs.writeBytes(fileData);
      fs.close();

    Crypto streams, like CipherInputStream andCipherOutputStream, do not behave properly until you
    issue a close() call. So if you are going to do
    crypto, you will need to trap the close() before it
    reaches the underlying socket streams. This is
    because the close() method finalizes the cryptographic
    operation. (Flush() would make more sense, no idea
    why they did it this way). You do want to finalize
    the crypto for any given message, but you need to trap
    the close() before it hits the socket and ends the
    whole affair.
    I don't see anything about that in the bug database.
    No matter what streams you are using, if you aregoing to keep the socket open for multiple
    request-response round-trips, you need to very closely
    pay attention to how much data is being sent on each
    trip. Normally, you can fudge this a bit on a
    request-response because the close() call on the
    output stream will cause the receiving input stream to
    behave more or less properly. However, a flush() will
    not.Why not? I use that all the time with no problem.
    A good practice is to send the content-length of
    the message first, so the receiving input stream
    "knows" when to stop reading, does not block, and then
    can send its own bytes back the other direction.
    (Where the process is repeated).
    An alternative is to use two threads: read and write.
    The read recieves, parses, validates and then pushes complete messages to a queue.
    The write pulls messages from the queue, processes and send a result.
    A variation to the above is what happens when an invalid message is received. The server can ignore it, the read can send a error response, or the read can push a message to the queue which causes the write to send a error response.

  • The service bit "write enable" in Java Socket

    Hello,
    I am trying to communicate with a third party application and I am having some problems. I use a standard Socket connection, were my application is the Server (ServerSocket). The connection is established, but no data is transmitted.
    I talked with the guys behind this third party application, and they said that perhaps their application does not receive a "write enable" service bit of the tcp/ip protocol. I'm not a network wiz, so this is an unknown territory for me.
    So I ask you. What is this "write enable" tcp/ip service bit? Is this per default on in java socket connections? If no, how can I change this?
    Perhaps this is very basic knowledge, but I've googled a bit and have not found this "service bit".

    This could refer to something in their
    protocol which you aren't implementing correctly.Probably, but I believe they have "forgotten" to mention that it is required in our implementation.
    OTOH if you are the server the transaction would
    normally begin with a request from the client, not a
    write-enablement from the server.The defined protocol smelled fishy when reading the "whitepaper", but we had to accept it (politics).

  • Java sockets (peek functionality)

    Hi,
    how do i peek at a datagram, look into the data and accordingly
    decide whether to consume that datagram or leave it for later
    processing?
    Is this something Java sockets readily support OR do I need
    to implement some kind of store-for-later-processing
    please help
    Thanks.

    java.net.DatagramSocket doesn't have peek support in the API at this time - see 4102648.
    If you were to use a non-blocking DatagramChannel and register it with a Selector then you should be notification that a packet can be read. Okay, it doesn't give you the details - just that a packet is available but it may help in your environment.

  • Java sockets and raw sockets

    Hello!
    I have made my own file sharing program with Java sockets
    and i have read a litle bit about raw sockets also.
    What are the differences between Java sockets and raw sockets?

    raw socket can have packet types which Java does not.
    Generally if you need something useful which Java cannot do there is a utility already written which does what you want, e.g. ping and you can call that.

  • Java sockets and winsock

    when I use java socket to talk to my proxy, without going through a winsock, my java applet runs fine. However, when I patch winsock in between my java gui and my other proxy, I dont receive anything in the gui. I snoop at packets coming from my other proxy through winsock to my gui and the data is all there. I just cannot receive it.
    I use java class DatagramSocket() to establish a socket connection and use class DatagramPacket to get the packets coming. This works if I dont go through a ms proxy.
    Can anyone tell me why?

    How can you snoop at packets comming? I need to know so bad. :-)
    Thank you

  • Firefox telling users that Java is out of date

    Currently, the latest Java version out for WIndows PC, is Java7 U51. Java8 has been released in Beta version. When you do a check in Firefox to check if your plugins are up do date, Firefow tells you that Java is out of date. It wants you to upgrade to Java8. Its been this way from the day Java8 was released in Bate version
    That shouldn't be. As long as Java8 is only Beta, the lates veriosn that can be referenced is Java7U51. Please fix.

    Yes, sorry, this is a known problem and has been posted in the bug tracking system where different approaches are under discussion.
    Due to a change in Firefox 29, a completely different system is being developed for plugin checking, and based on what I read yesterday, that might be taking priority over various lingering problems with the current plugin checker.

  • Parse Exception : java.text.ParseException: Unparseable date

    I have inherited a UDF in some mapping that on the whole, works okay...
    but it throws an error after mapping a few dates:
    Parse Exception : java.text.ParseException: Unparseable date: "2010-03-18T00:00:00.000Z"
    Parse Exception : java.text.ParseException: Unparseable date: "2010-03-23T23:59:00.000Z"
    Parse Exception : java.text.ParseException: Unparseable date: "2010-03-18T00:00:00.000Z"
    Parse Exception : java.text.ParseException: Unparseable date: "2010-03-23T23:59:00.000Z"
    Parse Exception : java.text.ParseException: Unparseable date: "2010-03-18T00:00:00.000Z"
    Parse Exception : java.text.ParseException: Unparseable date: "2010-03-23T23:59:00.000Z"
    the first few map okay...  then i get the exception.
    the UDF is as follows:
    public String convertDateTimeToUTC(String strDate, Container container) throws StreamTransformationException{
    AbstractTrace trace = container.getTrace();
    Date date=null;
    SimpleDateFormat sdfSource = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
    try{
    String dt = strDate;
    date = sdfSource.parse(dt);
    trace.addInfo("Local Date:"+date);
    SimpleDateFormat sdfDestination = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
    strDate = sdfDestination.format(date);
    catch(ParseException pe){
    trace.addInfo("Parse Exception : " + pe);
    return strDate;
    can anyone see why this fails after successfully mapping a few fields???

    the first mapping works correctly...
    then we reuse the same fields to map to the additional segments.
    the context is correct as it is trying to pull the same fields in...  it just throw the error with the same data in the same UDF/Function Library but for different segments! :o(
    http://img199.imageshack.us/img199/3104/dateconversion.jpg
    as you can see from the screenshot above, the mapping works in the first instance, then fails on subsequent nodes.

Maybe you are looking for

  • Cannot seem to register any of my web services in OWSM, v10.1.3.1

    Hi All - I am using Oracle Web Services Manager, v10.1.3.1 build [2006.10.06.06.37] Whenever I try to use OWSM management console to register a web service with my gateway I get the following error: "Service information cannot be added because of the

  • IMovie w/ Network Accounts

    Server : XServer Running 10.6.8 hosting Worgroup Manager for user management Clients : 2010 MacBooks running 10.6.8 Software : iMovie 11 I work for a school district and teachers are starting to want their students to create iMovie projects. All stud

  • Question about restoring from backup

    The local Apple store swapped out my iphone 4 for a new one yesterday because of issues with the headphone jack. When I restored from backup, all texts, contacts, call records, etc. moved over perfectly. However, it didn't copy my books, music or pho

  • ORG.UNIT VALID

    HI, 1)i wont to now how i find the org.unit valid dates begda & ennda i now that i have to take it from hep1000 or 1001, 2)i wont to now how i now if org unit is valid or not regards

  • Firefox does not paint the window if Windows 7 Basic theme is selected and Fujitsu USB port replicator PR07 is used

    If I use "Windows 7 Basic" theme on my laptop (Fujitsu Lifebook A532), the Firefox window is not painted. I see only the border of the window, the content not. As soon as I switch back to the "Windows 7" theme, it works again. It could be related to