private HtmlRequest readRequest(Socket socket) throws IOException { BufferedReader requestBufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream())); StringBuilder requestStringBuilder = new StringBuilder(); try { String line = requestBufferedReader.readLine(); while (!line.isEmpty()) { requestStringBuilder.append(line + NEWLINE); line = requestBufferedReader.readLine(); } } catch (IOException e) { System.out.println("An error occured while reading from the socket: " + e.toString()); } if (requestStringBuilder.toString().isEmpty()) { return null; } HtmlRequest htmlRequest = new HtmlRequest(requestStringBuilder.toString()); if (htmlRequest.type.equals("POST") || htmlRequest.type.equals("TRACE")) { htmlRequest.getParametersFromBody(requestBufferedReader); } return htmlRequest; }
public void run() { try { theInputStream = new BufferedReader(new InputStreamReader(client.getInputStream())); theOutputStream = new PrintStream(client.getOutputStream()); while (true) { readin = theInputStream.readLine(); chat.ta.append(readin + "\n"); } } catch (SocketException e) { chat.ta.append("连接中断!\n"); chat.clientBtn.setEnabled(true); chat.serverBtn.setEnabled(true); chat.tfaddress.setEnabled(true); chat.tfport.setEnabled(true); try { i--; skt.close(); client.close(); } catch (IOException err) { chat.ta.append(err.toString()); } } catch (IOException e) { chat.ta.append(e.toString()); } }
public static void main(String[] args) { ServerSocket welcomeSocket; // TCP-Server-Socketklasse Socket connectionSocket; // TCP-Standard-Socketklasse int counter = 0; // Z�hlt die erzeugten Bearbeitungs-Threads try { /* Server-Socket erzeugen */ welcomeSocket = new ServerSocket(SERVER_PORT); while (true) { // Server laufen IMMER System.out.println( "TCP Server: Waiting for connection - listening TCP port " + SERVER_PORT); /* * Blockiert auf Verbindungsanfrage warten --> nach * Verbindungsaufbau Standard-Socket erzeugen und * connectionSocket zuweisen */ connectionSocket = welcomeSocket.accept(); /* Neuen Arbeits-Thread erzeugen und den Socket �bergeben */ (new TCPServerThread(++counter, connectionSocket)).start(); } } catch (IOException e) { System.err.println(e.toString()); } }
private int Load_Edges(DataInputStream inStream, int num) { String line; String item1, item2, item3; int source_node; int dest_node; int value; int n_nodes, edge_cnt; // Node nodes_array[] = new Node[num]; // Wil Edge edge; n_nodes = num; Node nodes_array[]; nodes_array = new Node[n_nodes]; nodes_array = this.Node_Array(); // Wil edge_cnt = 0; try { while ((line = inStream.readLine()) != null) { StringTokenizer Data = new StringTokenizer(line, " "); item1 = Data.nextToken(); item2 = Data.nextToken(); item3 = Data.nextToken(); source_node = Integer.parseInt(item1); dest_node = Integer.parseInt(item2); value = Integer.parseInt(item3); edge = new Edge(nodes_array[source_node - 1], nodes_array[dest_node - 1], value); this.Add_Edge(edge); edge_cnt++; } // inFile.close(); } catch (IOException e) { System.err.println("Error in accessing URL: " + e.toString()); System.exit(1); } return edge_cnt; }
public void run() { String capitalizedSentence; System.out.println("TCP Server Thread " + name + " is running until QUIT is received!"); try { /* Socket-Basisstreams durch spezielle Streams filtern */ inFromClient = new BufferedReader(new InputStreamReader(socket.getInputStream())); outToClient = new DataOutputStream(socket.getOutputStream()); while (serviceRequested) { /* String vom Client empfangen und in Gro�buchstaben umwandeln */ capitalizedSentence = readFromClient().toUpperCase(); /* Modifizierten String an Client senden */ writeToClient(capitalizedSentence); /* Test, ob Arbeitsthread beendet werden soll */ if (capitalizedSentence.indexOf("QUIT") > -1) { serviceRequested = false; } } /* Socket-Streams schlie�en --> Verbindungsabbau */ socket.close(); } catch (IOException e) { System.err.println(e.toString()); System.exit(1); } System.out.println("TCP Server Thread " + name + " stopped!"); }
public SSLResult fingerprint() throws IOException, FingerprintError { SSLConfigCollector scc; scc = new SSLConfigCollector(host, port, si); scc.setCertValidator(cv); startDate = new Date(); sslSupport = SSLResult.UNKNOWN; // If a delay is set, wait some time, except for // the first request if (!initial && (delay > 0)) { if (Debug.get(Debug.Delay)) { System.err.println("Delaying request."); } try { Thread.sleep(delay); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } } initial = false; try { scc.probe(); sslSupport = SSLResult.SUPPORTED; sslSupportReason = null; } catch (NoSSLException e) { // This exception is thrown when the protocol support // for ssl is not available sslSupport = SSLResult.UNSUPPORTED; sslSupportReason = e.toString(); } catch (FingerprintException e) { sslSupport = SSLResult.UNSUPPORTED; sslSupportReason = e.toString(); } catch (IOException e) { sslSupport = SSLResult.UNKNOWN; sslSupportReason = e.toString(); } endDate = new Date(); protos = scc.getSupportedProtos(); ProbeResult pres = new ProbeResult( host, port, startDate, endDate, sslSupport, sslSupportReason, scc.getServerCertificates(), scc.serverCertificateVerifies(), scc.serverCertNameMatch()); pres.setProtosResult(protos); return pres; }
private void sendEntityBodyToClient( DataOutputStream socketOutputStream, HtmlResponse htmlResponse, boolean isChunked) throws IOException { byte[] content = htmlResponse.getEntityBody(); if (!isChunked) { try { socketOutputStream.write(content, 0, content.length); socketOutputStream.flush(); } catch (IOException e) { System.out.println("Writing the answer caused an error" + e.toString()); } } else { int currentIndexStart = 0; int currentIndexEnd = Math.min(CHUNCKED_BYTES - 1, content.length - 1); int lengthOfBytesSent = currentIndexEnd - currentIndexStart + 1; while (currentIndexStart < content.length - 1) { socketOutputStream.writeBytes(Integer.toHexString(lengthOfBytesSent) + CRLF); socketOutputStream.write(content, currentIndexStart, lengthOfBytesSent); socketOutputStream.writeBytes(CRLF); socketOutputStream.flush(); currentIndexStart = currentIndexEnd + 1; currentIndexEnd = Math.min(currentIndexStart + CHUNCKED_BYTES - 1, content.length - 1); lengthOfBytesSent = currentIndexEnd - currentIndexStart + 1; } socketOutputStream.writeBytes("0" + CRLF); socketOutputStream.writeBytes(CRLF); socketOutputStream.flush(); } }
public Server(int port, Face chat) { try { this.port = port; skt = new ServerSocket(port); this.chat = chat; } catch (IOException e) { chat.ta.append(e.toString()); } }
private int Load_Nodes(DataInputStream inStream) { // need to open file and load data int node_id; int x_cor; int y_cor; // int n_nodes, n_edges, node_cnt, arrow_status; Node n; String line; String item1, item2, item3, item4; node_id = 0; x_cor = 0; y_cor = 0; // n_nodes = 0; // n_edges = 0; // arrow_status = -1; try { if ((line = inStream.readLine()) != null) { StringTokenizer Data = new StringTokenizer(line, " "); item1 = Data.nextToken(); n_nodes = Integer.parseInt(item1); item2 = Data.nextToken(); n_edges = Integer.parseInt(item2); item3 = Data.nextToken(); arrow_status = Integer.parseInt(item3); // item4 = Data.nextToken(); // type = Integer.parseInt( item4 ); // graph = new GraphClass( n_nodes, n_edges, arrow_status ); nodes = new Node[n_nodes]; edges = new Edge[n_edges]; // ??? while ((this.Node_Cnt() < n_nodes) && ((line = inStream.readLine()) != null)) { Data = new StringTokenizer(line, " "); item1 = Data.nextToken(); item2 = Data.nextToken(); item3 = Data.nextToken(); node_id = Integer.parseInt(item1); x_cor = Integer.parseInt(item2); y_cor = Integer.parseInt(item3); n = new Node(node_id, x_cor, y_cor); this.Add_Node(n); } if (n_nodes != 0) { source_node = nodes[0]; } } } catch (IOException e) { System.err.println("error in file" + e.toString()); System.exit(1); } return this.Node_Cnt(); }
private void writeToClient(String reply) { /* Sende den String als Antwortzeile (mit newline) zum Client */ try { outToClient.writeBytes(reply + '\n'); } catch (IOException e) { System.err.println(e.toString()); serviceRequested = false; } System.out.println("TCP Server Thread " + name + " has written the message: " + reply); }
public long startTcpServer(SocketAddress sa) throws EmReactorException { try { ServerSocketChannel server = ServerSocketChannel.open(); server.configureBlocking(false); server.socket().bind(sa); long s = createBinding(); Acceptors.put(s, server); server.register(mySelector, SelectionKey.OP_ACCEPT, s); return s; } catch (IOException e) { throw new EmReactorException("unable to open socket acceptor: " + e.toString()); } }
/* * Write a String to the Client output stream */ private boolean writeMsg(String msg) { // if Client is still connected send the message to it if (!socket.isConnected()) { close(); return false; } // write the message to the stream try { sOutput.writeObject(msg); } // if an error occurs, do not abort just inform the user catch (IOException e) { display("Error sending message to " + username); display(e.toString()); } return true; }
private void writeDeadFile(String fileName) { try { PrintWriter out = new PrintWriter(new BufferedOutputStream(new FileOutputStream(fileName))); out.println("<TITLE>Error</TITLE>"); out.println("<BODY BGCOLOR=\"white\">"); out.println("<h1>Operation not allowed</h1>"); out.println("<hr>"); out.println("<P>This operation only works for live Qat instances"); out.println("<hr>"); out.println("<A HREF=\"./index.html\">Report Index</A><BR>"); out.println("</BODY>"); out.println("</HTML>"); out.flush(); out.close(); } catch (IOException e) { System.out.println("Error writing page:" + fileName + " " + e.toString()); } }
public static void main(String[] args) throws IOException { // default hostname String hostName = "139.62.210.150"; // defaults if args not there if (args.length != 0 && args[0] != null) { hostName = args[0]; } System.out.println("Defaulting to host: \"" + hostName + "\""); int port = 3515; Socket clientSocket = new Socket(hostName, port); // Attempt To open communications between the server and client if (clientSocket != null) { try ( // Attempt to create the reciving and outputing communications PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true); BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); ) { // if Successful start reading user's input via a buffer stream BufferedReader userInput = new BufferedReader(new InputStreamReader(System.in)); // Create response Variables String serverResponse; String userResponse; while ((serverResponse = in.readLine()) != null) { System.out.println(serverResponse); // the program to exit uses the string "Exit\n" if (serverResponse.equals("Exit")) { System.out.println("Goodbye Program Exiting\n"); break; } // reads user's input and forwards it to the Server if (serverResponse.equals("Select Menu Option")) { userResponse = userInput.readLine(); if (userResponse != null) { out.println(userResponse); } } } } catch (IOException e) { System.err.println(e.toString()); } } clientSocket.close(); }
/* * Write a String to the Client output stream */ private boolean writeMsg(ChatMessage cm) { // if Client is still connected send the message to it if (!socket.isConnected()) { close(); return false; } // write the message to the stream try { boolean sendChatMessage = cm.getType() == ChatMessage.ESTABLISHCONNECTION; boolean sendMediaFileMessage = cm.getType() == ChatMessage.ESTABLISHCONNECTIONANDPLAY; if (sendChatMessage || sendMediaFileMessage) sOutput.writeObject(cm); else sOutput.writeObject(cm.getMessage()); } // if an error occurs, do not abort just inform the user catch (IOException e) { display("Error sending message to " + username); display(e.toString()); } return true; }
public void run() { System.out.println(" -----------------UDP Demo Server-----------------" + "\n\n"); while (true) { try { // Create a new socket connection bound to the defined port DatagramSocket sock = new DatagramSocket(BROADCAST_PORT); System.out.println("Waiting for data on local port: " + sock.getLocalPort()); // Create a packet to contain incoming data byte[] buf = new byte[256]; DatagramPacket packet = new DatagramPacket(buf, buf.length); // Wait for incoming data (receive() is a blocking method) sock.receive(packet); // Retrieve data from packet and display String data = new String(packet.getData()); int endIndex = data.indexOf(0); data = data.substring(0, endIndex); int remotePort = packet.getPort(); System.out.println("Received data from remote port " + remotePort + ":\n" + data); // Determine origin of packet and display information InetAddress remoteAddress = packet.getAddress(); System.out.println("Sent from address: " + remoteAddress.getHostAddress()); // Send back an acknowledgment String ack = "RECEIVED " + new Date().toString(); sock.send(new DatagramPacket(ack.getBytes(), ack.length(), remoteAddress, remotePort)); sock.close(); } catch (IOException ioe) { System.out.println("Error: IOException - " + ioe.toString()); } } }
public void run() { chat.ta.append("等待连线......"); while (true) { try { client[k] = skt.accept(); if (i < 2) { ServerThread server[] = new ServerThread[10]; server[k] = new ServerThread(client[k], this.chat, i); l = server.length; server[k].start(); chat.ta.append("客户端" + client[k].getInetAddress() + "已连线\n"); theOutputStream = new PrintStream(server[k].getClient().getOutputStream()); i = server[k].getI(); k++; } else { } } catch (SocketException e) { } catch (IOException e) { chat.ta.append(e.toString()); } } }
public long connectTcpServer(String bindAddr, int bindPort, String address, int port) { long b = createBinding(); try { SocketChannel sc = SocketChannel.open(); sc.configureBlocking(false); if (bindAddr != null) sc.socket().bind(new InetSocketAddress(bindAddr, bindPort)); EventableSocketChannel ec = new EventableSocketChannel(sc, b, mySelector); if (sc.connect(new InetSocketAddress(address, port))) { // Connection returned immediately. Can happen with localhost connections. // WARNING, this code is untested due to lack of available test conditions. // Ought to be be able to come here from a localhost connection, but that // doesn't happen on Linux. (Maybe on FreeBSD?) // The reason for not handling this until we can test it is that we // really need to return from this function WITHOUT triggering any EM events. // That's because until the user code has seen the signature we generated here, // it won't be able to properly dispatch them. The C++ EM deals with this // by setting pending mode as a flag in ALL eventable descriptors and making // the descriptor select for writable. Then, it can send UNBOUND and // CONNECTION_COMPLETED on the next pass through the loop, because writable will // fire. throw new RuntimeException("immediate-connect unimplemented"); } else { ec.setConnectPending(); Connections.put(b, ec); NewConnections.add(b); } } catch (IOException e) { // Can theoretically come here if a connect failure can be determined immediately. // I don't know how to make that happen for testing purposes. throw new RuntimeException("immediate-connect unimplemented: " + e.toString()); } return b; }
public void generateFileChunks(JspWriter out, HttpServletRequest req) throws IOException { long startOffset = 0; int chunkSizeToView = 0; String referrer = req.getParameter("referrer"); boolean noLink = false; if (referrer == null) { noLink = true; } String filename = req.getParameter("filename"); if (filename == null) { out.print("Invalid input (file name absent)"); return; } String namenodeInfoPortStr = req.getParameter("namenodeInfoPort"); int namenodeInfoPort = -1; if (namenodeInfoPortStr != null) namenodeInfoPort = Integer.parseInt(namenodeInfoPortStr); String chunkSizeToViewStr = req.getParameter("chunkSizeToView"); if (chunkSizeToViewStr != null && Integer.parseInt(chunkSizeToViewStr) > 0) chunkSizeToView = Integer.parseInt(chunkSizeToViewStr); else chunkSizeToView = jspHelper.defaultChunkSizeToView; if (!noLink) { out.print("<h3>Tail of File: "); JspHelper.printPathWithLinks(filename, out, namenodeInfoPort); out.print("</h3><hr>"); out.print("<a href=\"" + referrer + "\">Go Back to File View</a><hr>"); } else { out.print("<h3>" + filename + "</h3>"); } out.print("<b>Chunk size to view (in bytes, up to file's DFS block size): </b>"); out.print( "<input type=\"text\" name=\"chunkSizeToView\" value=" + chunkSizeToView + " size=10 maxlength=10>"); out.print(" <input type=\"submit\" name=\"submit\" value=\"Refresh\"><hr>"); out.print("<input type=\"hidden\" name=\"filename\" value=\"" + filename + "\">"); out.print( "<input type=\"hidden\" name=\"namenodeInfoPort\" value=\"" + namenodeInfoPort + "\">"); if (!noLink) out.print("<input type=\"hidden\" name=\"referrer\" value=\"" + referrer + "\">"); // fetch the block from the datanode that has the last block for this file DFSClient dfs = new DFSClient(jspHelper.nameNodeAddr, jspHelper.conf); List<LocatedBlock> blocks = dfs.namenode.getBlockLocations(filename, 0, Long.MAX_VALUE).getLocatedBlocks(); if (blocks == null || blocks.size() == 0) { out.print("No datanodes contain blocks of file " + filename); dfs.close(); return; } LocatedBlock lastBlk = blocks.get(blocks.size() - 1); long blockSize = lastBlk.getBlock().getNumBytes(); long blockId = lastBlk.getBlock().getBlockId(); long genStamp = lastBlk.getBlock().getGenerationStamp(); DatanodeInfo chosenNode; try { chosenNode = jspHelper.bestNode(lastBlk); } catch (IOException e) { out.print(e.toString()); dfs.close(); return; } InetSocketAddress addr = NetUtils.createSocketAddr(chosenNode.getName()); // view the last chunkSizeToView bytes while Tailing if (blockSize >= chunkSizeToView) startOffset = blockSize - chunkSizeToView; else startOffset = 0; out.print("<textarea cols=\"100\" rows=\"25\" wrap=\"virtual\" style=\"width:100%\" READONLY>"); jspHelper.streamBlockInAscii( addr, blockId, genStamp, blockSize, startOffset, chunkSizeToView, out); out.print("</textarea>"); dfs.close(); }
public void generateFileDetails(JspWriter out, HttpServletRequest req, Configuration conf) throws IOException, InterruptedException { int chunkSizeToView = 0; long startOffset = 0; int datanodePort; String blockIdStr = null; long currBlockId = 0; blockIdStr = req.getParameter("blockId"); if (blockIdStr == null) { out.print("Invalid input (blockId absent)"); return; } currBlockId = Long.parseLong(blockIdStr); String datanodePortStr = req.getParameter("datanodePort"); if (datanodePortStr == null) { out.print("Invalid input (datanodePort absent)"); return; } datanodePort = Integer.parseInt(datanodePortStr); String namenodeInfoPortStr = req.getParameter("namenodeInfoPort"); int namenodeInfoPort = -1; if (namenodeInfoPortStr != null) namenodeInfoPort = Integer.parseInt(namenodeInfoPortStr); String chunkSizeToViewStr = req.getParameter("chunkSizeToView"); if (chunkSizeToViewStr != null && Integer.parseInt(chunkSizeToViewStr) > 0) { chunkSizeToView = Integer.parseInt(chunkSizeToViewStr); } else { chunkSizeToView = JspHelper.getDefaultChunkSize(conf); } String startOffsetStr = req.getParameter("startOffset"); if (startOffsetStr == null || Long.parseLong(startOffsetStr) < 0) startOffset = 0; else startOffset = Long.parseLong(startOffsetStr); String filename = HtmlQuoting.unquoteHtmlChars(req.getParameter("filename")); if (filename == null || filename.length() == 0) { out.print("Invalid input"); return; } String blockSizeStr = req.getParameter("blockSize"); long blockSize = 0; if (blockSizeStr == null || blockSizeStr.length() == 0) { out.print("Invalid input"); return; } blockSize = Long.parseLong(blockSizeStr); String tokenString = req.getParameter(JspHelper.DELEGATION_PARAMETER_NAME); UserGroupInformation ugi = JspHelper.getUGI(req, conf); DFSClient dfs = JspHelper.getDFSClient(ugi, jspHelper.nameNodeAddr, conf); List<LocatedBlock> blocks = dfs.namenode.getBlockLocations(filename, 0, Long.MAX_VALUE).getLocatedBlocks(); // Add the various links for looking at the file contents // URL for downloading the full file String downloadUrl = "http://" + req.getServerName() + ":" + +req.getServerPort() + "/streamFile" + URLEncoder.encode(filename, "UTF-8") + "?" + JspHelper.DELEGATION_PARAMETER_NAME + "=" + tokenString; out.print("<a name=\"viewOptions\"></a>"); out.print("<a href=\"" + downloadUrl + "\">Download this file</a><br>"); DatanodeInfo chosenNode; // URL for TAIL LocatedBlock lastBlk = blocks.get(blocks.size() - 1); long blockId = lastBlk.getBlock().getBlockId(); try { chosenNode = jspHelper.bestNode(lastBlk); } catch (IOException e) { out.print(e.toString()); dfs.close(); return; } String fqdn = InetAddress.getByName(chosenNode.getHost()).getCanonicalHostName(); String tailUrl = "http://" + fqdn + ":" + chosenNode.getInfoPort() + "/tail.jsp?filename=" + URLEncoder.encode(filename, "UTF-8") + "&namenodeInfoPort=" + namenodeInfoPort + "&chunkSizeToView=" + chunkSizeToView + "&referrer=" + URLEncoder.encode(req.getRequestURL() + "?" + req.getQueryString(), "UTF-8") + JspHelper.getDelegationTokenUrlParam(tokenString); out.print("<a href=\"" + tailUrl + "\">Tail this file</a><br>"); out.print("<form action=\"/browseBlock.jsp\" method=GET>"); out.print("<b>Chunk size to view (in bytes, up to file's DFS block size): </b>"); out.print("<input type=\"hidden\" name=\"blockId\" value=\"" + currBlockId + "\">"); out.print("<input type=\"hidden\" name=\"blockSize\" value=\"" + blockSize + "\">"); out.print("<input type=\"hidden\" name=\"startOffset\" value=\"" + startOffset + "\">"); out.print("<input type=\"hidden\" name=\"filename\" value=\"" + filename + "\">"); out.print("<input type=\"hidden\" name=\"datanodePort\" value=\"" + datanodePort + "\">"); out.print( "<input type=\"hidden\" name=\"namenodeInfoPort\" value=\"" + namenodeInfoPort + "\">"); out.print( "<input type=\"text\" name=\"chunkSizeToView\" value=" + chunkSizeToView + " size=10 maxlength=10>"); out.print(" <input type=\"submit\" name=\"submit\" value=\"Refresh\">"); out.print("</form>"); out.print("<hr>"); out.print("<a name=\"blockDetails\"></a>"); out.print("<B>Total number of blocks: " + blocks.size() + "</B><br>"); // generate a table and dump the info out.println("\n<table>"); for (LocatedBlock cur : blocks) { out.print("<tr>"); blockId = cur.getBlock().getBlockId(); blockSize = cur.getBlock().getNumBytes(); String blk = "blk_" + Long.toString(blockId); out.print("<td>" + Long.toString(blockId) + ":</td>"); DatanodeInfo[] locs = cur.getLocations(); for (int j = 0; j < locs.length; j++) { String datanodeAddr = locs[j].getName(); datanodePort = Integer.parseInt( datanodeAddr.substring(datanodeAddr.indexOf(':') + 1, datanodeAddr.length())); fqdn = InetAddress.getByName(locs[j].getHost()).getCanonicalHostName(); String blockUrl = "http://" + fqdn + ":" + locs[j].getInfoPort() + "/browseBlock.jsp?blockId=" + Long.toString(blockId) + "&blockSize=" + blockSize + "&filename=" + URLEncoder.encode(filename, "UTF-8") + "&datanodePort=" + datanodePort + "&genstamp=" + cur.getBlock().getGenerationStamp() + "&namenodeInfoPort=" + namenodeInfoPort + "&chunkSizeToView=" + chunkSizeToView; out.print( "<td> </td>" + "<td><a href=\"" + blockUrl + "\">" + datanodeAddr + "</a></td>"); } out.println("</tr>"); } out.println("</table>"); out.print("<hr>"); String namenodeHost = jspHelper.nameNodeAddr.getHostName(); out.print( "<br><a href=\"http://" + InetAddress.getByName(namenodeHost).getCanonicalHostName() + ":" + namenodeInfoPort + "/dfshealth.jsp\">Go back to DFS home</a>"); dfs.close(); }
/** * close: close the socket and stream * * @return: true for success, false for error */ protected boolean close() { _dlog("Do main thread closing..."); if (_sock != null && !_sock.isClosed()) { _dlog("Closing the receiving thread"); try { _sock.close(); _in.close(); _out.close(); _sock = null; _in = null; _out = null; _dlog("Success!"); } catch (IOException e) { if (!_server.noException()) { _elog(e.toString()); } if (_server.debugMode()) { e.printStackTrace(); } return false; } } _sock = null; _in = null; _out = null; _dlog("Cancel the user input thread"); if (_userNet != null) { _userNet.stop(); _userNet.join(); // guaranteed to be closed _userNet = null; } if (_userSock != null && !_userSock.isClosed()) { _dlog("Closing the user input thread"); // Stop the user thread try { _userSock.close(); _userIn.close(); _userOut.close(); _userSock = null; _userIn = null; _userOut = null; _dlog("Success!"); } catch (IOException e) { if (!_server.noException()) { _elog(e.toString()); } if (_server.debugMode()) { e.printStackTrace(); } return false; } } _userSock = null; _userIn = null; _userOut = null; /* Cancel all client nodes */ _dlog("Finished"); return true; /* CAUTION: _server is never cleared */ }
/** * connect: connect to the master * * @return: true for success and false for failure */ protected boolean connect() { boolean connected = true; try { _sock = new Socket(_serverIP, _serverPort); _out = new PrintWriter(_sock.getOutputStream(), true); _in = new BufferedReader(new InputStreamReader(_sock.getInputStream())); String reply = sendAll(); if (!reply.equals(ProtocolConstants.PACK_STR_CONFIRM_HEAD)) { /* Tokenize */ StringTokenizer st = new StringTokenizer(reply); if (st.nextToken().equals(ProtocolConstants.PACK_STR_ERRMES_HEAD)) { _elog(st.nextToken()); return false; } } _userSock = new Socket(_serverIP, _serverPort); _userOut = new PrintWriter(_userSock.getOutputStream(), true); _userIn = new BufferedReader(new InputStreamReader(_userSock.getInputStream())); String replyUser = sendUserID(); if (!replyUser.equals(ProtocolConstants.PACK_STR_CONFIRM_HEAD)) { throw new Exception("Not confirmed"); } } catch (UnknownHostException e) { if (!_server.noException()) { _elog(e.toString()); } if (_server.debugMode()) { e.printStackTrace(); } connected = false; } catch (IOException e) { if (!_server.noException()) { _elog(e.toString()); } if (_server.debugMode()) { e.printStackTrace(); } connected = false; } catch (Exception e) { if (!_server.noException()) { _elog(e.toString()); } if (_server.debugMode()) { e.printStackTrace(); } connected = false; } if (!connected) { return connected; } if (!connected) { /* Remove the pair of socket */ _sock = null; _in = null; _out = null; _userSock = null; _userOut = null; _userIn = null; } return connected; }
public static void main(String[] args) { BufferedReader sysIn = new BufferedReader(new InputStreamReader(System.in)); // Read from console PrintStream sysOut = System.out; // Print to console SSLSocketFactory mainFactory = (SSLSocketFactory) SSLSocketFactory.getDefault(); // Get default SSL socket factory try { SSLSocket clientSocket = (SSLSocket) mainFactory.createSocket( "pop.mail.yahoo.com", 995); // create, connect, start handshake printSocketInfo(clientSocket); // Print connection info BufferedWriter serverWriter = new BufferedWriter( new OutputStreamWriter(clientSocket.getOutputStream())); // Write to server BufferedReader serverReader = new BufferedReader( new InputStreamReader(clientSocket.getInputStream())); // Read from server String serverInput = null; // Stores latest line from server String userInput = ""; // Stores lastest input line from user boolean tryRead = true; // Whether to read next line from serverReader (prevents blocking on multiline SMTP // responses) // The below booleans, used to successully close the connection, might be unnecessary boolean quitUser = false; // Whether the user has entered quit, might be unnecessary boolean openRead = true; // Whether serverReader is still open (serverInput != null) boolean openSocket = true; // Whether clientSocket is still open (clientSocket != null) // SMTP input variables boolean sendingData = false; boolean multi = false; // Main connection loop while (openSocket && openRead && !quitUser) { if (clientSocket == null) { // Break if socket is closed openSocket = false; break; } // Display server response/message if (multi) { while (tryRead) { serverInput = serverReader.readLine(); if (serverInput == null) { // If serverReader gets closed/connection broken openRead = false; tryRead = false; break; } sysOut.println(serverInput); // Check for multiline response or error if (serverInput.equals(".") || (serverInput.length() >= 4 && serverInput.startsWith("-ERR"))) { tryRead = false; } else { tryRead = true; } } } else { serverInput = serverReader.readLine(); if (serverInput == null) { // If serverReader gets closed/connection broken openRead = false; tryRead = false; break; } sysOut.println(serverInput); } multi = false; // Exit client if connection lost/closed prematurely if (openSocket == false || openRead == false) { break; } // If user previously entered quit if (userInput.length() >= 4 && userInput.substring(0, 4).equalsIgnoreCase("quit")) { quitUser = true; break; } // Get user input userInput = ""; // Reset userInput to show prompt // Read user input, display prompt if blank enter, otherwise send to server while (userInput.equals("")) { sysOut.print("C: "); userInput = sysIn.readLine(); } serverWriter.write(userInput, 0, userInput.length()); // Writing to server serverWriter.newLine(); serverWriter.flush(); tryRead = true; // Prepare for multi-line response if list, uidl, retr, or top if (userInput.equalsIgnoreCase("list") || userInput.equalsIgnoreCase("uidl") || userInput.equalsIgnoreCase("auth") || (userInput.length() >= 4 && userInput.substring(0, 4).equalsIgnoreCase("capa")) || (userInput.length() >= 4 && userInput.substring(0, 4).equalsIgnoreCase("retr")) || (userInput.length() >= 4 && userInput.substring(0, 3).equalsIgnoreCase("top"))) { multi = true; } } // Clean up all connection objects serverWriter.close(); serverReader.close(); clientSocket.close(); sysIn.close(); sysOut.close(); } catch (IOException e) { System.err.println(e.toString()); } }
/** Submits POST command to the server, and reads the reply. */ public boolean post( String url, String fileName, String cryptToken, String type, String path, String content, String comment) throws IOException { String sep = "89692781418184"; while (content.indexOf(sep) != -1) sep += "x"; String message = makeMimeForm(fileName, cryptToken, type, path, content, comment, sep); // for test // URL server = new URL("http", "localhost", 80, savePath); URL server = new URL(getCodeBase().getProtocol(), getCodeBase().getHost(), getCodeBase().getPort(), url); URLConnection connection = server.openConnection(); connection.setAllowUserInteraction(false); connection.setDoOutput(true); // connection.setDoInput(true); connection.setUseCaches(false); connection.setRequestProperty("Content-type", "multipart/form-data; boundary=" + sep); connection.setRequestProperty("Content-length", Integer.toString(message.length())); // System.out.println(url); String replyString = null; try { DataOutputStream out = new DataOutputStream(connection.getOutputStream()); out.writeBytes(message); out.close(); // System.out.println("Wrote " + message.length() + // " bytes to\n" + connection); try { BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); String reply = null; while ((reply = in.readLine()) != null) { if (reply.startsWith("ERROR ")) { replyString = reply.substring("ERROR ".length()); } } in.close(); } catch (IOException ioe) { replyString = ioe.toString(); } } catch (UnknownServiceException use) { replyString = use.getMessage(); System.out.println(message); } if (replyString != null) { // System.out.println("---- Reply " + replyString); if (replyString.startsWith("URL ")) { URL eurl = getURL(replyString.substring("URL ".length())); getAppletContext().showDocument(eurl); } else if (replyString.startsWith("java.io.FileNotFoundException")) { // debug; when run from appletviewer, the http connection // is not available so write the file content if (path.endsWith(".draw") || path.endsWith(".map")) System.out.println(content); } else showStatus(replyString); return false; } else { showStatus(url + " saved"); return true; } }
/** * Creates source for sources with two orders: firstly in RIC, secondly in time. * * @param filePath complete filename and path containing prices. * @param symbols set of symbols present into the file. * @param lineProcessor strategy to part each line. * @throws IOException if one symbol (at least) cannot be found. */ public MultipleSymbolScanner( final String filePath, final String[] symbols, final LineParser lineParser, final SpreadTradesMgr[] spreadTradesMgr) throws IOException { this.lineParser = lineParser; this.spreadTradesMgr = spreadTradesMgr; this.filePath = filePath; this.symbols = symbols; this.mainReader = new RandomAccessFile(filePath, "r"); this.partReader = new RandomAccessFile[symbols.length]; this.nextMilliseconds = new long[symbols.length]; this.nextLine = new String[symbols.length]; boolean optimisticJumps = true; final ErrorControl errorControl = this.lineParser.getErrorControl(); this.lineParser.setErrorControl(LineParser.nullErrorControl); final String cacheFilePath = filePath + ".cachejump"; if (new File(cacheFilePath).exists()) { final ObjectInputStream cacheJumpsFileIn = new ObjectInputStream(new FileInputStream(cacheFilePath)); log.info("Using stored cached jumps in file " + cacheFilePath); try { try { for (; ; ) { final String s = cacheJumpsFileIn.readUTF(); final long pos = cacheJumpsFileIn.readLong(); for (int i = 0; i < symbols.length; i++) { if (symbols[i].equals(s)) { partReader[i] = new RandomAccessFile(filePath, "r"); partReader[i].seek(pos); log.info("Using cached information: position " + pos + " for " + s); break; } } } } catch (IOException ioe) { cacheJumpsFileIn.close(); } for (int i = 0; i < partReader.length; i++) { if (partReader[i] == null) { throw new IOException("Symbol " + symbols[i] + " not placed"); } } } catch (IOException ioe) { log.log(Level.SEVERE, ioe.toString(), ioe); log.severe("Error reading file " + cacheFilePath + ". Removing"); new File(cacheFilePath).delete(); } } else { final ObjectOutputStream cacheJumpsFileOut = new ObjectOutputStream(new FileOutputStream(cacheFilePath)); log.fine("Caching jumps for future uses in file " + cacheFilePath); log.info("Scannig file to place reading pointers"); for (int i = 0; i < symbols.length; i++) { long lastPosition = this.mainReader.getFilePointer(); long foundPosition; log.fine("Starting to search symbol " + symbols[i] + " from position " + lastPosition); for (; ; ) { foundPosition = this.mainReader.getFilePointer(); final String line = readNextLineCycling(lastPosition); if (line == null) { // All file's been read without finding desired symbol. throw new IOException( "Cannot find symbol '" + symbols[i] + "' in file '" + filePath + "'"); } if (this.lineParser.isValid(line) && symbols[i].equals(this.lineParser.getSymbol(line, 0))) { break; } } log.info("Located place for reader on " + symbols[i] + ":" + foundPosition); cacheJumpsFileOut.writeUTF(symbols[i]); cacheJumpsFileOut.writeLong(foundPosition); partReader[i] = new RandomAccessFile(filePath, "r"); partReader[i].seek(foundPosition); final int optimisticJump = (int) (2 * (foundPosition - lastPosition) / 3); this.mainReader.skipBytes(optimisticJump); } cacheJumpsFileOut.flush(); cacheJumpsFileOut.close(); } log.info("File scanned. Placing reading pointers"); // Boot up for (int i = 0; i < symbols.length; i++) { for (; ; ) { try { String line = partReader[i].readLine(); while (line != null && !this.lineParser.isValid(line)) { line = partReader[i].readLine(); } if (!symbols[i].equals(this.lineParser.parse(line).getSymbol(0))) { this.nextLine[i] = null; } else { this.nextLine[i] = line; this.nextMilliseconds[i] = this.lineParser.parse(line).getUTCTimestampCopy().getTimeInMillis(); break; } } catch (Exception e) { log.log( Level.SEVERE, "Exception reading first line " + "of file '" + this.filePath + "'", e); log.severe("Maybe cache file is not correct?"); } } } log.info("Readers placed correctly. Source started"); this.lineParser.setErrorControl(errorControl); }