001 /* 002 * $Id: SocketChannel.java 2771 2009-08-05 20:10:49Z kredel $ 003 */ 004 005 //package edu.unima.ky.parallel; 006 package edu.jas.util; 007 008 009 import java.io.IOException; 010 import java.io.ObjectOutputStream; 011 import java.io.ObjectInputStream; 012 import java.net.Socket; 013 014 015 /** 016 * SocketChannel provides a communication channel for Java objects using TCP/IP 017 * sockets. Refactored for java.util.concurrent. 018 * @author Akitoshi Yoshida 019 * @author Heinz Kredel. 020 */ 021 public class SocketChannel { 022 023 024 /* 025 * Input stream from the socket. 026 */ 027 private final ObjectInputStream in; 028 029 030 /* 031 * Output stream to the socket. 032 */ 033 private final ObjectOutputStream out; 034 035 036 /* 037 * Underlying socket. 038 */ 039 private final Socket soc; 040 041 042 /** 043 * Constructs a socket channel on the given socket s. 044 * @param s A socket object. 045 */ 046 public SocketChannel(Socket s) throws IOException { 047 soc = s; 048 out = new ObjectOutputStream(s.getOutputStream()); 049 out.flush(); 050 in = new ObjectInputStream(s.getInputStream()); 051 } 052 053 054 /** 055 * Get the Socket 056 */ 057 public Socket getSocket() { 058 return soc; 059 } 060 061 062 /** 063 * Sends an object 064 */ 065 public void send(Object v) throws IOException { 066 synchronized (out) { 067 out.writeObject(v); 068 out.flush(); 069 } 070 } 071 072 073 /** 074 * Receives an object 075 */ 076 public Object receive() throws IOException, ClassNotFoundException { 077 Object v = null; 078 synchronized (in) { 079 v = in.readObject(); 080 } 081 return v; 082 } 083 084 085 /** 086 * Closes the channel. 087 */ 088 public void close() { 089 if (in != null) { 090 try { 091 in.close(); 092 } catch (IOException e) { 093 } 094 } 095 if (out != null) { 096 try { 097 out.close(); 098 } catch (IOException e) { 099 } 100 } 101 if (soc != null) { 102 try { 103 soc.close(); 104 } catch (IOException e) { 105 } 106 } 107 } 108 109 110 /** 111 * to string 112 */ 113 @Override 114 public String toString() { 115 return "socketChannel(" + soc + ")"; 116 } 117 118 }