Small input program (html) using sockets.
I'm having problems with the following whenever a cd is inputted via cdinput.html it runs cdprocess.jsp to create an XML document with DOM in memory this is sent to the server and is later printed out to the users screen. The server must be started in order for it to work. For some reason it doesn't seem to be working? In cd process i'm suppose to modify a few things they've been numbered i've complete all of them so far but i'm not sure if #4 is correct. I've been stuck on it for a while now, any help would be appreciated.
cdinput.html
<html>
<head><title></title></head>
<body>
<br /><center>
<table width="500" border="0"
cellpadding="4" cellspacing="0">
<tr>
<td bgcolor="lightblue">
<font color="white" face="Arial"><b>CD Input</b>
</font></td>
</tr>
<tr>
<td>
<form method="post" action="cdprocess.jsp">
<table>
<tr>
<td><b>CD Title:</b></td>
<td><input type="text" name="cdtitle" size="20"></td>
</tr>
<tr>
<td><b>CD Artist:</b></td>
<td><input type="text" name="cdartist" size="20"></td>
</tr>
<tr>
<td><b>Track 1 title:</b></td>
<td><input type="text" name="track1title" size="20"></td>
</tr>
<tr>
<td><b>Track 1 time:</b></td>
<td><input type="text" name="track1time" size="20"></td>
</tr>
<tr>
<td><b>Track 1 rating:</b></td>
<td><select name="track1rating">
<option value="1"> 1 </option>
<option value="2"> 2 </option>
<option value="3"> 3 </option>
<option value="4"> 4 </option>
<option value="5"> 5 </option>
</select></td>
</tr>
</table><br />
<input type="submit" value="Enter CD">
</form>
</td>
</tr>
</table>
</center>
</body>
</html>
SimpleServer2.java
import java.net.*;
import java.io.*;
The server half of a simple client/server application.
The server that reads lines of text from a socket and sends
back a copy of the same text to the client.
The main difference between this example and SimpleServer is that
this one allows multiple sequential (not concurrent) connections
from clients.
public class SimpleServer2 {
public static final int serverListenPort = 10151;
The main method is the entry point for the application.
Because this is a simple application for testing, everything
is done inside the main method.
@param args Arguments entered on the command-line.
public static void main(String[] args) throws IOException {
ServerSocket myServerSocket = null;
// Try to open a server socket listening on specified listen port
try {
myServerSocket = new ServerSocket(serverListenPort);
catch (IOException e) {
System.err.println("Could not listen on port" + serverListenPort);
System.err.println("Perhaps somebody else is using that port number??");
System.exit(1);
* This is where the difference begins.
* Note the while(true) loop, which means that we will
* accept an infinite number of connections from clients,
* one at a time. The server will never exit by itself,
* you will have to kill it manually by typing Ctrl-C
* at the command line where it is running.
while(true) {
// Create a variable to hold the socket that we get when a
// new client connects
Socket myClientSocket = null;
// Accept a new connection from a client
// This method call will block until a client does connect
try {
myClientSocket = myServerSocket.accept();
catch (IOException e) {
System.err.println("Accept failed.");
System.exit(1);
// Now that we have a socket, the reading and writing code
// is basically the same as in the client application.
// We start by getting hold of the output stream to write data
// to the socket, and the input stream to read data from the socket.
PrintWriter out = new PrintWriter(myClientSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(
new InputStreamReader(myClientSocket.getInputStream()));
String inputLine, outputLine;
// Now use a loop to read in lines of text from the client, and
// echo them back to the client
// Note that this time we do NOT break out of the loop.
// We will just wait for the client to close the connection,
// and when it does, our inputLine will be null and then we
// will break out of the loop.
while ((inputLine = in.readLine()) != null) {
outputLine = inputLine;
out.println(outputLine);
// If we have broken out of the loop, we can assume that
// the input is closed. The output probably is too, but
// just in case, we'll close it anyway.
out.close();
cdprocess.jsp
<%@page import="java.io.*"%>
<%@page import="java.net.*"%>
<%@page import="javax.xml.parsers.*"%>
<%@page import="org.w3c.dom.*"%>
<%@page import="org.apache.xml.serialize.*"%>
<%!
public static final String serverHost = "cdserver";
public static final int serverPort = 10151;
%>
<hr />
<pre>
<%
Socket mySocket = null; // socket object
PrintWriter sockOut = null; // to send data to the socket
BufferedReader sockIn = null; // to receive data from the socket
try {
// #1 add line that creates a client socket
mySocket = new Socket(serverHost, serverPort);
// #2 add lines that create input and output streams
// attached to the socket you just created
sockOut = new PrintWriter(mySocket.getOutputStream(), true);
sockIn = new BufferedReader(new InputStreamReader(mySocket.getInputStream()));
} catch (UnknownHostException e) {
throw e; // This time the JSP can handle the exception, not us
} catch (IOException e) {
throw e; // This time the JSP can handle the exception, not us
String cdTitle, cdArtist, track1Title, track1Time, track1Rating;
// Retrieve the HTML form field values
cdTitle = request.getParameter("cdtitle");
cdArtist = request.getParameter("cdartist");
track1Title = request.getParameter("track1title");
track1Time = request.getParameter("track1time");
track1Rating = request.getParameter("track1rating");
* Our goal is to build an XML document in memory using DOM.
* We will build it up one tree-node at a time, and when it is
* finished, we will write the whole lot out to a file on disk.
/* Start of the DOM code */
// Create a new DOM factory, and from that a new DOM builder object
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
// Note that we are creating a new (empty) document
Document document = builder.newDocument();
// The root element of our document wil be <cd>
// It gets stored as the child node of the whole document (it is the root)
Element rootElement = document.createElement("cd");
document.appendChild(rootElement);
// Create an element for the CD title called <title>
Element cdTitleElement = document.createElement("title");
// Add a text code under the <title> element with the value that
// the user entered into the title field of the web form (cdTitle)
cdTitleElement.appendChild(document.createTextNode(cdTitle));
// Place the <title> element underneath the <cd> element in the tree
rootElement.appendChild(cdTitleElement);
// Create an <artist> element with the form data, place underneath <cd>
Element cdArtistElement = document.createElement("artist");
cdArtistElement.appendChild(document.createTextNode(cdArtist));
rootElement.appendChild(cdArtistElement);
// Create a <tracklist> element and place it underneath <cd> in the tree
// Note that it has no text node associated with it (it not a leaf node)
Element trackListElement = document.createElement("tracklist");
rootElement.appendChild(trackListElement);
// In this example we only have one track, so it is not necessary to
// use a loop (in fact it is quite silly)
// But the code below is included to demonstrate how you could loop
// through and add a set of different tracks one by one if you
// needed to (although you would need to have the track data already
// stored in an array or a java.util.Vector or similar
int numTracks = 1;
for (int i=0; i<numTracks; i++) {
String trackNum = Integer.toString(i+1);
// Note that this element has an attribute associated with it that
// is the track number. It will look like: <track id="1">
// The <track> element is placed underneath <tracklist> in the tree
Element trackElement = document.createElement("track");
trackElement.setAttribute("id", trackNum);
trackListElement.appendChild(trackElement);
// Track title element called <title>, placed underneath <track>
Element trackTitleElement = document.createElement("title");
trackTitleElement.appendChild(document.createTextNode(track1Title));
trackElement.appendChild(trackTitleElement);
// Track time element called <time>, placed underneath <track>
Element trackTimeElement = document.createElement("time");
trackTimeElement.appendChild(document.createTextNode(track1Time));
trackElement.appendChild(trackTimeElement);
// Track rating element called <rating>, placed underneath <track>
Element trackRatingElement = document.createElement("rating");
trackRatingElement.appendChild(document.createTextNode(track1Rating));
trackElement.appendChild(trackRatingElement);
/* End of DOM code */
/* Start of serialization code */
// Create a new OutputFormat - this is something specific needed by the
// XMLSerializer class shown below. We will specify that we want the
// generated XML to be formatted with indenting so it is easy to read.
OutputFormat format = new OutputFormat();
format.setIndenting(true);
* Note: the next line of code is the one change to serialization
// Create a new XMLSerializer that will be used to write out the XML
// This time we will serialize it to the socket
// #3 change this line so that it serializes to the socket,
// not to the "out" object
XMLSerializer serializer = new XMLSerializer(writer, format);
// Call the serialize() method, and pass to it out XML document
// stored in memory in a DOM tree
serializer.serialize(document);
/* End of serialization code */
// Print out a message to indicate the end of the data, and
// flush the stream so all the data gets sent now
sockOut.println("<!--QUIT-->");
sockOut.flush();
BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
String fromServer;
String fromUser;
#4 add a while loop that reads text from the
server socket input stream, line by line, and prints
it out to the web page, using out.println(...);
Note that because the reply from the server will contain
XML, you will need to call upon the toHTMLString() method
defined below to escape the < and > symbols so that they
will display correctly in the web browser.
Also note that as you receive the reply back from the
server, you should look out for the special <!--QUIT-->
string that will indicate when there is no more data
to receive.
while ((fromServer = sockIn.readLine()) != null) {
out.println(sockIn.readLine());
// If the reply from the server said "QUIT", exit from the
// while loop by using a break statement.
if (fromServer.equals("QUIT")) {
out.println("Connection closed - good bye ...");
// Print the text from the server out to the user's screen
out.println("Reply from Server: " + fromServer);
// Now read a line of text from the keyboard (typed by user)
fromUser = stdIn.readLine();
// If it wasn't null, print it out to the screen, and also
// print a copy of it out to the socket
if (fromUser != null) {
out.println("Client: " + fromUser);
sockOut.println(fromUser);
// Close all the streams we have open, and then close the socket
sockOut.close();
sockIn.close();
mySocket.close();
%>
<%!
This method will escape any special HTML characters in a string
of text. For example, if you are trying to print out an XML
document using a JSP, you need to escape all the '<' and '>' tags
so that the web browser will not try and treat them as HTML.
Note that generic utility code like this would usually be put into
a JavaBean, but is put in the JSP here for simplicity.
This code taken from H. Bergsten, JavaServer Pages, O'Reilly, 2001.
private static String toHTMLString(String in) {
StringBuffer out = new StringBuffer();
for (int i = 0; in != null && i < in.length(); i++) {
char c = in.charAt(i);
if (c == '\'') {
out.append("'");
else if (c == '\"') {
out.append(""");
else if (c == '<') {
out.append("<");
else if (c == '>') {
out.append(">");
else if (c == '&') {
out.append("&");
else {
out.append(c);
return out.toString();
%>
</pre>
<hr />
the following also has me stumped:
// #3 change this line so that it serializes to the socket,
// not to the "out" object
i tried changing the first parameter to the socket "mySocket" but it just gives me a compilation error.
Similar Messages
-
Send html page (with images) using sockets
I am trying to implement http and am coding this using sockets. So it is a simple client-server set up where the browser queries my server for a webpage and it should be shown. The html itself is fine, but I can't get any of the images to show up! All of my messages give me a status "200 OK" for the images, so I cant understand what my problem is!
Also, is the status and header lines supposed to be shown in the browser? I didnt think so but it keeps showing up when I query a webpage.
Please help!
import java.io.* ;
import java.net.* ;
import java.util.* ;
public final class WebServer
public static void main(String argv[]) throws Exception
// Set the port number.
int port = 8888;
// Establish the listen socket.
ServerSocket ssocket = new ServerSocket(port);
// Establish client socket
Socket csocket = null;
// Process HTTP service requests in an infinite loop.
while (true)
// Listen for a TCP connection request.
// (note: this blocks until connection is made)
csocket = ssocket.accept();
// Construct an object to process the HTTP request message.
HttpRequest request = new HttpRequest(csocket);
// Create a new thread to process the request.
Thread thread = new Thread(request);
// Start the thread.
thread.start();
final class HttpRequest implements Runnable
final static String CRLF = "\r\n";
Socket socket;
// Constructor
public HttpRequest(Socket socket) throws Exception
this.socket = socket;
// Implement the run() method of the Runnable interface.
public void run()
try
processRequest();
catch (Exception e)
System.out.println(e);
private static void sendBytes(FileInputStream fis, OutputStream os)
throws Exception
// Construct a 1K buffer to hold bytes on their way to the socket.
byte[] buffer = new byte[1024];
int bytes = 0;
// Copy requested file into the socket's output stream.
while((bytes = fis.read(buffer)) != -1 ) {
os.write(buffer, 0, bytes);
os.flush();
private static String contentType(String fileName)
fileName = fileName.toLowerCase();
if(fileName.endsWith(".htm") || fileName.endsWith(".html")) {
return "text/html";
if(fileName.endsWith(".jpg") || fileName.endsWith(".jpeg") ) {
return "image/jpeg";
if(fileName.endsWith(".gif")) {
return "image/gif";
return "application/octet-stream";
private void processRequest() throws Exception
// Get a reference to the socket's input and output streams.
InputStream is = socket.getInputStream();
DataOutputStream os = new DataOutputStream(socket.getOutputStream());
// Set up input stream filters.
InputStreamReader ir = new InputStreamReader(is);
BufferedReader br = new BufferedReader(ir);
// Get the request line of the HTTP request message.
String requestLine = br.readLine();
// Display the request line.
System.out.println();
System.out.println(requestLine);
// Get and display the header lines.
String headerLine = null;
while ((headerLine = br.readLine()).length() != 0)
System.out.println(headerLine);
// Extract the filename from the request line.
StringTokenizer tokens = new StringTokenizer(requestLine);
tokens.nextToken(); // skip over the method, which should be "GET"
String fileName = tokens.nextToken();
// Prepend a "." so that file request is within the current directory.
fileName = "C:\\CSM\\Networking\\Project1" + fileName;
// Open the requested file.
FileInputStream fis = null;
boolean fileExists = true;
try {
fis = new FileInputStream(fileName);
} catch (FileNotFoundException e) {
fileExists = false;
// Construct the response message.
String statusLine = null;
String contentTypeLine = null;
String entityBody = null;
if (fileExists) {
statusLine = "200 OK" + CRLF;
contentTypeLine = "Content-type: " +
contentType( fileName ) + CRLF
+ "Content-length: " + fis.available() + CRLF;
else {
statusLine = "404 Not Found" + CRLF;
contentTypeLine = "Content-type: text/html" + CRLF;
entityBody = "<HTML>" +
"<HEAD><TITLE>Not Found</TITLE></HEAD>" +
"<BODY>Not Found</BODY></HTML>";
// Send the status line.
os.writeBytes(statusLine);
System.out.println(statusLine);
// Send the content type line.
os.writeBytes(contentTypeLine);
System.out.println(contentTypeLine);
// Send a blank line to indicate the end of the header lines.
os.writeBytes(CRLF);
// Send the entity body.
if (fileExists)
sendBytes(fis, os);
fis.close();
// file does not exist
else
os.writeBytes(entityBody);
// Close streams and socket.
os.flush();
os.close();
br.close();
socket.close();
}ok. i figured it out. STUPID mistake. i forgot to include "HTTP/1.1" in my status line!!!
-
Javac command line program can use class, need tomcat to do same
This may be simple, but any assistance to a newby would be greatly aprreciated. I have a this class file:
import java.io.*;
public class OCrypt
static public String getEncryptedText (String plainText)
Runtime R;
String _encryptedText = "";
char[] someData = new char[16];
R = java.lang.Runtime.getRuntime();
try
java.lang.Process P = R.exec("./OCrypt " + plainText
InputStreamReader ISR = new InputStreamReader(P.getInputStream());
ISR.read(someData);
_encryptedText = new String(someData,0,11);
catch (Exception e)
_encryptedText = "***ERROR***";
return (_encryptedText);
Where ./OCrypt is a compiled program writtine in C in the same folder. A small test program calls the class and C code and works. Now for the tomcat part, I need to be able to call this code from tomcat. I know it has worked in the past on a much older version of tomcat. I need to figure out how to make it work on tomcat 5.5.9
ThanksThanks for the reply. Please bare with me. I am reading in the SAMS teach yourself book to know how to create the folder structure. I assumed this folder should be off of my WEB-INF/classes folder. See the full path below.
Couple of things
1 - Your class should be in a package. Otherwise you
will have problems.I added the .class file to a package. Or at least I think I did. I added this line to the top of the code.
package OCrypt;
The file is in this folder:
/var/local/jakarta-tomcat-5.5.9/webapps/ROOT/pss/WEB-INF/classes/OCrypt
Then I ran 'javac OCrypt' in that folder.
2 -
Where ./OCrypt is a compiled program writtine in C
I always keep the C file in the same location as the class. That may be a problem later when tomcat can resolve the class but then can't find that program. I hope that will generate a completely different error.
in the same folder.
In the same folder as what?
The current working directory for Tomcat is normally
[TOMCAT]/bin. Is that the folder you mean? I will put it there if I get the class resolved.
If you want to use this tool, I would say put it in
the PATH for the machine (so it can be found from
anywhere) or use an absolute reference to it.I can put a complete path in the .java file before I compile if you think that will help.
You> can't count on the working directory being where you
think it is. But right now I would just like to create a simple class like adding two numbers together and returning a result. My larger issue is more of a server configuration. I am using a enterprise wide tomcat server and have been told EACH application folder has it's own classpath. I even attempted to write a JSP that would output my enviroment to a simple page. This didn't work because the env was only for the user, not the env AFTER all the startup scripts run for the server.
>
One solution is to use ServletContext.getRealPath().
Is there any reason you couldn't rewrite the
encryption into Java - that way you wouldn't have to
bother with Runtime.exec()
Another alternative would be to use JNI to get a Java
interface to the C class.
http://www-128.ibm.com/developerworks/edu/j-dw-javajni
-i.html
I think either of those solutions are preferable to
using Runtime.exec(). -
How to open multi-windows to operate a remote compute using socket
hi, please help me.
I want to develop a program, it can open multi-windows to operate the remote comput at one time just like NetTerm. It use socket to setup connection with remote computer.
Now I am using a Thread class to setup socket connection with computer, and use Thread's static varible to control all kinds of action of socket.But it can work only when openning one window,because all the thread instances share the same static variable.
How to do it? Not using Thread? Then the frame will be frozen.
All adivse are welcomed.Thank you.Maybe I don't say it clearly.The program need to show the output of the socket in the JTextArea and transfer the user input to the input of the socket to control the remote computer.
-
Reading / Writing files using Sockets
Hi there guys,
I am fairly new to this forum. I have been having a problem for the past three days. I am implementing a client/server implementation using Sockets which is a submodule of a project I am working on. What I want is that a files content are read and transferred over the network to the server that writes it down to a different file .
What the code presently does is :
<<<<Client Code >>>>
It reads a file input.txt and sends the content over the network to the server.
<<<< Server Code >>>
It reads the incoming data from the client and writes the data out to a file called output.txt
What I want now is that the server should read the file output.txt and send the contents to the client which reads it and then writes it down as a new file called serverouput.txt . After that I want to compare and see of the size of input.txt and serveroutput.txt . If both are same that means that data has been written reliably to the server.
I have been trying to implement it for a long time and nothing seems to work out. I am posting the code for both client and server below. Any help in finalising things would be really appreciated.
CLIENT CODE
import java.awt.Color;
import java.awt.BorderLayout;
import java.awt.event.*;
import javax.swing.*;
import java.util.Date;
import java.io.*;
import java.net.*;
class sc {
static final int PORT = 4444; //Change this to the relevant port
static final String HOST = "127.0.0.1";
//Change this to the relevant HOST,
//(where Server.java is running)
public static void main(String args[]) {
try {
System.out.print("Sending data...\n");
Socket skt = new Socket(HOST, PORT);
// Set the socket option just in case server stalls
skt.setSoTimeout ( 2000 );
skt.setSoKeepAlive(true);
//Create a file input stream and a buffered input stream.
FileInputStream fis = new FileInputStream("input.txt");
BufferedInputStream in = new BufferedInputStream(fis);
BufferedOutputStream out = new BufferedOutputStream( skt.getOutputStream() );
//Read, and write the file to the socket
int i;
while ((i = in.read()) != -1) {
out.write(i);
//System.out.println(i);
// Enable SO_KEEPALIVE
out.flush();
out.close();
in.close();
skt.close();
catch( Exception e ) {
System.out.print("Error! It didn't work! " + e + "\n");
catch( IOException e ) {
System.out.print("Error! It didn't work! " + e + "\n");
SERVER CODE
import java.awt.Color;
import java.awt.BorderLayout;
import java.awt.event.*;
import javax.swing.*;
import java.util.Date;
import java.io.*;
import java.net.*;
class ClientWorker implements Runnable {
private Socket client;
ClientWorker(Socket client) {
this.client = client;
public void run(){
try {
FileOutputStream fos = new FileOutputStream("output.txt");
BufferedOutputStream out = new BufferedOutputStream(fos);
BufferedInputStream in = new BufferedInputStream( client.getInputStream() );
//Read, and write the file to the socket
int i;
while ((i = in.read()) != -1) {
out.write(i);
//System.out.println(i);
System.out.println("Receiving data...");
out.flush();
in.close();
out.close();
client.close();
// srvr.close();
System.out.println("Transfer complete.");
catch(Exception e) {
System.out.print("Error! It didn't work! " + e + "\n");
class ss1 {
ServerSocket server = null;
ss1(){ //Begin Constructor
} //End Constructor
public void listenSocket(){
try{
server = new ServerSocket(4444);
} catch (IOException e) {
System.out.println("Could not listen on port 4444");
System.exit(-1);
while(true){
ClientWorker w;
try{
w = new ClientWorker(server.accept());
Thread t = new Thread(w);
t.start();
} catch (IOException e) {
System.out.println("Accept failed: 4444");
System.exit(-1);
protected void finalize(){
//Objects created in run method are finalized when
//program terminates and thread exits
try{
server.close();
} catch (IOException e) {
System.out.println("Could not close socket");
System.exit(-1);
public static void main(String[] args){
ss1 frame = new ss1();
frame.listenSocket();
}............................................. After that I want to
compare and see of the size of input.txt and
serveroutput.txt . If both are same that means that
data has been written reliably to the server.You don't need to do this. TCP/IP ensures the reliable transmition of data. By using a socket you are automaticaly sure that the data is reliably transmitted (Unless there is some sort of exception).
To get the size of the files you can use a File object. Look it up in java.io package in API documentation.
java-code-snippet (without error checking)
File clientFile = new File("input.txt");
clientFile.length(); -
Help: send unicode text using sockets
Hi,
I am trying to send unicode text to a native app using sockets. My test code looks like this
Socket socket = new Socket(m_serverHost, m_hostPort);
OutputStreamWriter out = new OutputStreamWriter(socket.getOutputStream(), "UTF-8");
InputStreamReader reader = new InputStreamReader(socket.getInputStream(), "UTF-8");
BufferedReader in = new BufferedReader(reader);
// receive response to connect
byte[] rc = new byte[4];
int i = 0;
while (i < 4)
rc[i++] = (byte) in.read();
String text = new String("Hello");
out.write(text);
// receive response to "hello"
i = 0;
while (i < 4)
rc[i++] = (byte) in.read();
My test program is connecting to the server socket but the server does not seem to understand the text that I send.
Please comment if I am doing anything wrong or advice if you have any different ideas.
Thanks,
nallamosTry using the following output and input streams.
out = new DataOutputStream(
new BufferedOutputStream(
s.getOutputStream()));
in = new DataInputStream(
new BufferedInputStream(
s.getInputStream()));
When you send the data send it using
out.WriteBytes(message) -
SAPFM06P - Can this program be used for triggering a Smartform Output??
Hi Experts!
I researched a lot and came to a conclusion that Program SAPFM06P can only be used trigger either a SAP SRIPT Output or a PDF FORM output. It cannot be used to trigger a SMARTFORM output directly as there is no code in it to trigger a SMARTFORM.
My understanding:
I will have to either create an Enhancement to the Program or a Zcopy of SAPFM06P where I need to write the logic in form routine ENTRY_NEU to call a SMARTFORM.
Please tell me if my understanding is correct and please guide me if there is any easier way to achieve the same functionality.
Thanks for help!
Greetings,
AmitHi,
U can Copy this standard Program to ZProgram and Insert the FM SSF_FUNCTIONMODULE_NAME and call ur smartform and assign the same combination to the Output type Given to u in NACE Transaction..
This is the Driver Program which I used for PO Smartform
[http://vjkvijaya.blogspot.com/2009/03/puchace-order-smartform-driver-program.html]
Regards,
Vijaya Lakshmi.T -
How to make a peer to peer connection in a network using sockets
My Project is about a multi agent meeting scheduling system.. I've kept the DB in the server and I only use the server to retrieve data from the database. I have used sockets to communicate with the server.
Each peer in the network is an agent for a perticular user and these agents will be communicating with each other for negotiation purposes..
The problem I have is that, I couldnt communicate wit other peers using sockets.. I couldnt find any sample java code of sockets to overcum this problem.f sumone has a sample code plz send me.
And if there is a more efficient and easy way I can connect these peers except sockets, plz tell me and if u have a sample java code plz be kind enough to send.
This is my final year project in the University
Thank you
Sajini De Silva ([email protected])Hi Sajinidesilva,
I think you'll find more support in the [JXTA Community|https://jxta.dev.java.net/] for your project. Also, there's an interesting article to start with : [Introduction to the Peer-to-Peer Sockets Project|http://www.onjava.com/pub/a/onjava/2003/12/03/p2psockets.html]. -
Problem with direct input program while uploading data into database
TABLES: BGR00, " Mappensatz
BMM00, " MM01/MM02 BTCI-Kopfdaten
BMMH1, " MM01/MM02 Hauptdaten
BMMH2, " Länderdaten (Steuern)
BMMH3, " Prognosewerte
BMMH4, " Verbrauchswerte
BMMH5, " Kurztexte
BMMH6, " Mengeneinheiten
BMMH7, " Langtexte
BMMH8. " Referentielle EAN's
Satztypen
DATA: MAPPENSATZ LIKE BMM00-STYPE VALUE '0',
KOPFSATZ LIKE BMM00-STYPE VALUE '1',
HAUPTSATZ LIKE BMM00-STYPE VALUE '2',
KUN_SATZ LIKE BMM00-STYPE VALUE 'Z',
LANDSATZ LIKE BMM00-STYPE VALUE '3',
PROGSATZ LIKE BMM00-STYPE VALUE '4',
VERBSATZ LIKE BMM00-STYPE VALUE '5',
KTEXTSATZ LIKE BMM00-STYPE VALUE '6',
MESATZ LIKE BMM00-STYPE VALUE '7',
TEXTSATZ LIKE BMM00-STYPE VALUE '8',
EANSATZ LIKE BMM00-STYPE VALUE '9'.
Common Data Bereich fuer die extern aufgerufenen Routinen
Initialstrukturen
DATA: BEGIN OF COMMON PART RMMMBIMY.
DATA: BEGIN OF I_BMM00.
INCLUDE STRUCTURE BMM00. " Kopfdaten
DATA: END OF I_BMM00.
DATA: BEGIN OF I_BMMH1.
INCLUDE STRUCTURE BMMH1. " Haupdaten
DATA: END OF I_BMMH1.
DATA: BEGIN OF I_BMMH2.
INCLUDE STRUCTURE BMMH2. " Länderdaten
DATA: END OF I_BMMH2.
DATA: BEGIN OF I_BMMH3.
INCLUDE STRUCTURE BMMH3. " Prognosewerte
DATA: END OF I_BMMH3.
DATA: BEGIN OF I_BMMH4.
INCLUDE STRUCTURE BMMH4. " Verbrauchswerte
DATA: END OF I_BMMH4.
DATA: BEGIN OF I_BMMH5.
INCLUDE STRUCTURE BMMH5. " Kurztexte
DATA: END OF I_BMMH5.
DATA: BEGIN OF I_BMMH6.
INCLUDE STRUCTURE BMMH6. " Mengeneinheiten
DATA: END OF I_BMMH6.
DATA: BEGIN OF I_BMMH7.
INCLUDE STRUCTURE BMMH7. " Textzeilen
DATA: END OF I_BMMH7.
DATA: BEGIN OF I_BMMH8.
INCLUDE STRUCTURE BMMH8. " Referentielle EAN's
DATA: END OF I_BMMH8.
DATA: END OF COMMON PART.
DATA: WA LIKE TEDATA-DATA.
Einzelfelder
DATA: GROUP_COUNT(6) TYPE C, " Anzahl Mappen
TRANS_COUNT(6) TYPE C, " alte Definition für rmmmbim0
SATZ_COUNT LIKE MUEB_REST-TRANC, " Trans.zähler neu
H_IND_COUNT LIKE MUEB_REST-D_IND, " Index welches Feld zurücks.
SATZ2_COUNT(6) TYPE C. " Anz. Sätze je Trans. ohne Kopfsatz
DATA: XEOF(1) TYPE C, " X=End of File erreicht
XHAUPTSATZ_EXIST TYPE C, " X=Hauptsatz zum Kopf exi.
NODATA(1) TYPE C. " kein BI für dieses Feld
mk/15.08.94:
DATA: GROUP_OPEN(1) TYPE C. " X=Mappe schon geöffnet
*eject
Konstanten
DATA: C_NODATA(1) TYPE C VALUE '/'. " Default für NODATA
DATA: MATNR_ERW LIKE MARA-MATNR VALUE '0 '.
DATA: MATNR_ERW_INT LIKE MARA-MATNR. "internal sight of '0 '
DATA: MATNR_LAST LIKE MARA-MATNR. "Material number
mk/11.08.94 2.1H:
If this flag is initial, the database updates will be done directly
during background maintenance instead of using a separate update
task. (no usage of this flag in dialogue mode!)
DATA: DBUPDATE_VB(1) VALUE ' '. "note 306628
data: matsync type mat_sync. "wk/99a no update in dialog if called
***INCLUDE ZMUSD070.
TABLES: MARA, "Material Master: General Data
MARC, "Material Master: C Segment
MARD, "Material Master: St Loc/Batch
MBEW, "Material Valuation
MVKE, "Material Master: Sales Data
MLGN, "Material Data per Whse Number
MLAN, "Tax Classification: Material
T001W, "Plants/Branches
TBICU.
DATA: BEGIN OF VALUTAB OCCURS 0.
INCLUDE STRUCTURE RSPARAMS.
DATA: END OF VALUTAB.
DATA: BEGIN OF VARTECH.
INCLUDE STRUCTURE VARID.
DATA: END OF VARTECH.
DATA: PARMS LIKE ZXXDCONV.
DATA: REC_COUNT TYPE I,
REC_COUNT_BAD TYPE I,
ZJOBID LIKE TBIZU-JOBID,
ZJOBCOUNT LIKE TBIZU-JOBCOUNT,
ZMATNR LIKE MARA-MATNR,
ZTEXT(80) TYPE C.
CONSTANTS: LIT_ZERO(18) TYPE C VALUE '000000000000000000',
LIT_CHAR TYPE C VALUE '_',
LIT_CREATE LIKE BMM00-TCODE VALUE 'MM01',
LIT_CHANGE LIKE BMM00-TCODE VALUE 'MM02',
LIT_CHECK(1) TYPE C VALUE 'X'.
DATA: BEGIN OF INP_DATA OCCURS 0,
MATNR(18) TYPE C, " Material code
UMREN(6) TYPE C, " Denominator
MEINH(3) TYPE C, " Alternate UOM
UMREZ(6) TYPE C, " Numerator
END OF INP_DATA.
*eject
SELECTION-SCREEN BEGIN OF BLOCK INOUT WITH FRAME TITLE TEXT-001.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (13) TEXT-004.
PARAMETERS: P_PC RADIOBUTTON GROUP SRC DEFAULT 'X'.
SELECTION-SCREEN COMMENT (6) TEXT-005.
PARAMETERS: P_UNIX RADIOBUTTON GROUP SRC.
SELECTION-SCREEN COMMENT (6) TEXT-006.
PARAMETERS: P_DS_TYP LIKE ZXXDCONV-DS_TYP
DEFAULT 'ASC'.
SELECTION-SCREEN END OF LINE.
*SELECT-OPTIONS: S_PATH FOR PARMS-PATH
NO INTERVALS
LOWER CASE.
PARAMETERS: P_PATH TYPE RLGRAP-FILENAME.
PARAMETERS: P_HDRLIN LIKE ZXXDCONV-HDR_LINES
DEFAULT 0,
P_JOBNAM LIKE TBICU_S-JOBNAME
MEMORY ID BM1,
P_DI_EXE AS CHECKBOX
DEFAULT LIT_CHECK,
P_MAPPE LIKE BGR00-GROUP
DEFAULT 'MRP_UOM_LOAD'
NO-DISPLAY.
SELECTION-SCREEN END OF BLOCK INOUT.
*eject
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_PATH.
CALL FUNCTION 'KD_GET_FILENAME_ON_F4'
EXPORTING
PROGRAM_NAME = SYST-REPID
DYNPRO_NUMBER = SYST-DYNNR
FIELD_NAME = 'P_PATH'
CHANGING
FILE_NAME = S_PATH-LOW
FILE_NAME = P_PATH
EXCEPTIONS
MASK_TOO_LONG = 1
OTHERS = 2.
AT SELECTION-SCREEN.
Set up parameter record
PARMS-UNIX = P_UNIX.
PARMS-PC = P_PC.
PARMS-DS_TYP = P_DS_TYP.
PARMS-JOBNAME = P_JOBNAM.
PARMS-MAPPE = P_MAPPE.
PARMS-HDR_LINES = P_HDRLIN.
*eject
Main Processing Routine *
START-OF-SELECTION.
Initialization
PERFORM 0000_HOUSEKEEPING.
Initialize transaction data in I_BM00
PERFORM 0500_INIT_BMM00.
Process input files
SORT S_PATH BY SIGN OPTION LOW.
MOVE S_PATH-LOW TO PARMS-PATH.
MOVE P_PATH TO PARMS-PATH.
LOOP AT S_PATH.
AT NEW LOW.
CLEAR INP_DATA.
REFRESH INP_DATA.
Read source data into internal table
PERFORM 1000_GET_SOURCE_DATA TABLES INP_DATA.
Processs each record in internal table
ZTEXT = TEXT-007.
ZTEXT+13 = PARMS-DS_NAME.
PERFORM 4000_PROGRESS_INDICATOR USING ZTEXT.
Initialize transaction data in I_BM00
PERFORM 0500_INIT_BMM00.
LOOP AT INP_DATA.
Reset tables for each record
BMM00 = I_BMM00.
BMMH1 = I_BMMH1.
BMMH6 = I_BMMH6.
Load structures with data
MOVE-CORRESPONDING INP_DATA TO BMM00.
PERFORM 2000_WRITE_OUTPUT USING BMM00.
MOVE-CORRESPONDING INP_DATA TO BMMH1.
PERFORM 2000_WRITE_OUTPUT USING BMMH1.
MOVE-CORRESPONDING INP_DATA TO BMMH6.
PERFORM 2000_WRITE_OUTPUT USING BMMH6.
REC_COUNT = REC_COUNT + 1.
ENDLOOP.
ENDAT.
ENDLOOP.
IF REC_COUNT GT 0
AND P_DI_EXE EQ LIT_CHECK.
PERFORM 3000_START_DI_JOB.
ENDIF.
WRITE: / TEXT-008,
REC_COUNT.
PERFORM 9000_END_OF_JOB.
*eject
Include containing common routines used by direct input programs
INCLUDE ZMUSD071.
*eject
FORM 0500_INIT_BMM00 *
Initialize I_BMM00 with transaction code and views selected *
FORM 0500_INIT_BMM00.
***this changes done by samson**
if not inp_data[] is initial.
select single matnr from mara INTO ZMATNR where matnr = inp_data-matnr.
if sy-subrc = 0.
I_BMM00-TCODE = LIT_CHANGE.
Basic data
I_BMM00-XEIK1 = LIT_CHECK.
else.
I_BMM00-TCODE = LIT_CREATE.
Basic data
I_BMM00-XEIK1 = LIT_CHECK.
endif.
endif.
**this changes above done by samson**
Transaction code
I_BMM00-TCODE = LIT_CHANGE.
Basic data
I_BMM00-XEIK1 = LIT_CHECK.
ENDFORM.
INCLUDE ZMUSD069.
*eject
FORM 0000_HOUSEKEEPING *
Initialization routines *
FORM 0000_HOUSEKEEPING.
PERFORM 0010_LDS_NAME.
PERFORM 0020_DS_NAME.
PERFORM 0030_OPEN_FILE.
PERFORM 0040_INIT_STRUCTS.
ENDFORM.
*eject
FORM 0010_LDS_NAME *
Obtain logical file name from DI job details *
FORM 0010_LDS_NAME.
Check valid job name
SELECT SINGLE * FROM TBICU
WHERE JOBNAME EQ PARMS-JOBNAME.
IF SY-SUBRC EQ 0.
CALL FUNCTION 'RS_VARIANT_VALUES_TECH_DATA'
EXPORTING
REPORT = TBICU-REPNAME
VARIANT = TBICU-VARIANT
IMPORTING
TECHN_DATA = VARTECH
TABLES
VARIANT_VALUES = VALUTAB
EXCEPTIONS
VARIANT_NON_EXISTENT = 1
VARIANT_OBSOLETE = 2
OTHERS = 3.
IF SY-SUBRC EQ 0.
READ TABLE VALUTAB WITH KEY 'LDS_NAME'.
MOVE VALUTAB-LOW TO PARMS-LDS_NAME.
ELSE.
MESSAGE I001 WITH PARMS-JOBNAME.
MESSAGE A099.
ENDIF.
ELSE.
MESSAGE I000 WITH PARMS-JOBNAME.
MESSAGE A099.
ENDIF.
ENDFORM.
*eject
FORM 0040_INIT_STRUCTS *
Initialize structures for direct input records *
FORM 0040_INIT_STRUCTS.
Start of standard SAP initialization from example program RMMMBIME
*------- Write session record -
CLEAR BGR00.
BGR00-STYPE = MAPPENSATZ.
BGR00-GROUP = PARMS-MAPPE.
BGR00-NODATA = C_NODATA.
BGR00-MANDT = SY-MANDT.
BGR00-USNAM = SY-UNAME.
BGR00-START = BGR00-NODATA.
BGR00-XKEEP = BGR00-NODATA.
PERFORM 2000_WRITE_OUTPUT USING BGR00.
*----- Initialize structures -
NODATA = BGR00-NODATA.
PERFORM INIT_STRUKTUREN_ERZEUGEN(RMMMBIMI) USING NODATA.
End of standard SAP initialization from example program RMMMBIME
ENDFORM.
*eject.
FORM 3000_START_DI_JOB *
Start direct input job *
FORM 3000_START_DI_JOB.
ZTEXT = 'Starting '(021).
ZTEXT+9 = TBICU-JOBNAME.
PERFORM 4000_PROGRESS_INDICATOR USING ZTEXT.
CALL FUNCTION 'BI_START_JOB'
EXPORTING
JOBID = ' '
JOBTEXT = TBICU-JOBNAME
REPNAME = TBICU-REPNAME
SERVER = TBICU-EXECSERVER
VARIANT = TBICU-VARIANT
NEW_JOB = 'X'
CONTINUE_JOB = ' '
START_IMMEDIATE = 'X'
DO_NOT_PRINT = 'X'
USERNAME = SY-UNAME
IMPORTING
JOBID = ZJOBID
JOBCOUNT = ZJOBCOUNT
EXCEPTIONS
JOB_OPEN_FAILED = 1
JOB_CLOSE_FAILED = 2
JOB_SUBMIT_FAILED = 3
WRONG_PARAMETERS = 4
JOB_DOES_NOT_EXIST = 5
WRONG_STARTTIME_GIVEN = 6
JOB_NOT_RELEASED = 7
WRONG_VARIANT = 8
NO_AUTHORITY = 9
DIALOG_CANCELLED = 10
JOB_ALREADY_EXISTS = 11
PERIODIC_NOT_ALLOWED = 12
ERROR_NUMBER_GET_NEXT = 13
OTHERS = 14.
IF SY-SUBRC EQ 0.
WRITE: / 'Direct input job'(022), TBICU-JOBNAME, 'started'.
ELSE.
WRITE: / 'Direct input failed with return code'(023), SY-SUBRC.
ENDIF.
FORM 0020_DS_NAME.
CALL FUNCTION 'FILE_GET_NAME'
EXPORTING
CLIENT = SY-MANDT
LOGICAL_FILENAME = PARMS-LDS_NAME
OPERATING_SYSTEM = SY-OPSYS
IMPORTING
FILE_NAME = PARMS-DS_NAME
EXCEPTIONS
FILE_NOT_FOUND = 1
OTHERS = 2.
IF SY-SUBRC NE 0.
MESSAGE E002 WITH PARMS-LDS_NAME.
MESSAGE A099.
ENDIF.
ENDFORM.
*eject
FORM 0030_OPEN_FILE *
Open physical file for output *
FORM 0030_OPEN_FILE.
OPEN DATASET PARMS-DS_NAME FOR OUTPUT IN TEXT MODE. "thg191105
OPEN DATASET PARMS-DS_NAME FOR OUTPUT IN TEXT MODE
encoding default. "thg191105
IF SY-SUBRC NE 0.
MESSAGE E003 WITH PARMS-DS_NAME.
MESSAGE A099.
ENDIF.
ENDFORM.
*eject
FORM 1000_GET_SOURCE_DATA *
Read source data into internal table *
--> INP_DATA " Name of internal table passed as parameter *
FORM 1000_GET_SOURCE_DATA TABLES INP_DATA.
CALL FUNCTION 'Z_FILE_UPLOAD'
EXPORTING
UNIX = PARMS-UNIX
PC = PARMS-PC
FILETYPE = PARMS-DS_TYP
FILENAME = PARMS-PATH
HDR_LINES = PARMS-HDR_LINES
TABLES
DATA_TAB = INP_DATA
EXCEPTIONS
CONVERSION_ERROR = 1
FILE_OPEN_ERROR = 2
FILE_READ_ERROR = 3
INVALID_TABLE_WIDTH = 4
INVALID_TYPE = 5
NO_BATCH = 6
UNKNOWN_ERROR = 7
INVALID_SOURCE = 8
OTHERS = 9.
ENDFORM.
*eject
FORM 2000_WRITE_OUTPUT *
Write record in standard SAP structure to UNIX file *
--> I_STRUCT " Name of record passed as parameter *
*FORM 2000_WRITE_OUTPUT USING I_STRUCT."SRY28NOV05
FORM 2000_WRITE_OUTPUT USING I_STRUCT TYPE ANY. "SRY28NOV05
TRANSFER I_STRUCT TO PARMS-DS_NAME.
IF SY-SUBRC NE 0.
MESSAGE E004 WITH PARMS-DS_NAME.
MESSAGE A099.
ENDIF.
ENDFORM.
*eject
*& Form 2100_WS_DOWNLOAD
text *
--> p1 text
<-- p2 text
FORM 2100_WS_DOWNLOAD TABLES INP_DATA.
DATA: FILENAME LIKE RLGRAP-FILENAME. "SRY28NOV05
DATA: W_FILENAME TYPE STRING. "SRY28NOV05
DATA: W_FTYP(10) TYPE C VALUE 'DAT'. "SRY28NOV05
MOVE PARMS-DS_NAME TO FILENAME. "SRY28NOV05
MOVE PARMS-DS_NAME TO W_FILENAME. "SRY28NOV05
*BEGIN OF BLOCK COMMENT BY SRY28NOV05
CALL FUNCTION 'WS_DOWNLOAD'
EXPORTING
BIN_FILESIZE = ' '
CODEPAGE = ' '
FILENAME = FILENAME
FILETYPE = 'DAT'
MODE = ' '
WK1_N_FORMAT = ' '
WK1_N_SIZE = ' '
WK1_T_FORMAT = ' '
WK1_T_SIZE = ' '
COL_SELECT = ' '
COL_SELECTMASK = ' '
importing
filelength =
TABLES
DATA_TAB = INP_DATA
FIELDNAMES =
EXCEPTIONS
FILE_OPEN_ERROR = 1
FILE_WRITE_ERROR = 2
INVALID_FILESIZE = 3
INVALID_TABLE_WIDTH = 4
INVALID_TYPE = 5
NO_BATCH = 6
UNKNOWN_ERROR = 7
OTHERS = 8.
*END OF BLOCK COMMENT BY SRY28NOV05
*BEGIN OF BLOCK ADDED BY SRY28NOV05
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
FILENAME = W_FILENAME
FILETYPE = W_FTYP
TABLES
DATA_TAB = INP_DATA
EXCEPTIONS
FILE_WRITE_ERROR = 1
NO_BATCH = 2
GUI_REFUSE_FILETRANSFER = 3
INVALID_TYPE = 4
NO_AUTHORITY = 5
UNKNOWN_ERROR = 6
HEADER_NOT_ALLOWED = 7
SEPARATOR_NOT_ALLOWED = 8
FILESIZE_NOT_ALLOWED = 9
HEADER_TOO_LONG = 10
DP_ERROR_CREATE = 11
DP_ERROR_SEND = 12
DP_ERROR_WRITE = 13
UNKNOWN_DP_ERROR = 14
ACCESS_DENIED = 15
DP_OUT_OF_MEMORY = 16
DISK_FULL = 17
DP_TIMEOUT = 18
FILE_NOT_FOUND = 19
DATAPROVIDER_EXCEPTION = 20
CONTROL_FLUSH_ERROR = 21
OTHERS = 22.
IF SY-SUBRC NE 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
*END OF BLOCK ADDED BY SRY28NOV05
ENDFORM. " 2100_WS_DOWNLOAD
*eject
FORM 4000_PROGRESS_INDICATOR *
Write progress text to status bar *
--> TEXT " Text passed as parameter *
FORM 4000_PROGRESS_INDICATOR USING TEXT.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
PERCENTAGE = 0
TEXT = TEXT
EXCEPTIONS
OTHERS = 1.
ENDFORM.
*eject.
FORM 9000_END_OF_JOB *
Close files on UNIX *
FORM 9000_END_OF_JOB.
CLOSE DATASET PARMS-DS_NAME.
ENDFORM.
FORM 1000_GET_SOURCE_DATA TABLES INP_DATA.
CALL FUNCTION 'Z_FILE_UPLOAD'
EXPORTING
UNIX = PARMS-UNIX
PC = PARMS-PC
FILETYPE = PARMS-DS_TYP
FILENAME = PARMS-PATH
HDR_LINES = PARMS-HDR_LINES
TABLES
DATA_TAB = INP_DATA
EXCEPTIONS
CONVERSION_ERROR = 1
FILE_OPEN_ERROR = 2
FILE_READ_ERROR = 3
INVALID_TABLE_WIDTH = 4
INVALID_TYPE = 5
NO_BATCH = 6
UNKNOWN_ERROR = 7
INVALID_SOURCE = 8
OTHERS = 9.
ENDFORM.
*eject
FORM 2000_WRITE_OUTPUT *
Write record in standard SAP structure to UNIX file *
--> I_STRUCT " Name of record passed as parameter *
*FORM 2000_WRITE_OUTPUT USING I_STRUCT."SRY28NOV05
FORM 2000_WRITE_OUTPUT USING I_STRUCT TYPE ANY. "SRY28NOV05
TRANSFER I_STRUCT TO PARMS-DS_NAME.
IF SY-SUBRC NE 0.
MESSAGE E004 WITH PARMS-DS_NAME.
MESSAGE A099.
ENDIF.
ENDFORM.
*eject
*& Form 2100_WS_DOWNLOAD
text *
--> p1 text
<-- p2 text
FORM 2100_WS_DOWNLOAD TABLES INP_DATA.Hi,
Thnaks for your reply, This is my requirement.
Here my problem is i am trying to upload the data from flatfile which contain materil number, denominator, Actual UOM, Nominator field values.
Which is the data i need to upload into MM02 and MM01, if material number is new then it has to create the material, if material is already existing it has to update the UOM values.
here i am getting data into my internal table INP_DATA, from that i am trying to upload the data to database by using job name MRP_MATERIAL_MASTER_DATA_UPLOAD with direct input program RMDATIND.
when i execute my program i am getting success message all the records writtin from flatfile to application server. and job started message.
then if i go into sm37 screen there i execute the job it is also giving active message. if i refresh it it is showing job completed message.
then i look at job log status. there i found that for existing material it is expecting material type, for new material it is giving some gravity error.
So could u help me in this it will be gr8.
Thanks & Regards,
RamNV -
Multiple inputs and outputs using DAQmx VIs
Hello,
I am fairly new with the LabView programming language. I have a few training books that I have been reading, and I have been following online tutorials and reading the forums. However, I have come to a problem where I don’t see a clear solution. I am using LabView 2009 (9.0f3) and DAQmx VIs.
I am using a NI 9172 chassis PLC, with two 9201 AI cards, 9217 AI RTD card, 9472 DO card, 9263 AO card, and two 9237 AI Bridge cards.
I am reading eight analog inputs with the 9201 cards, two analog RTD inputs with the 9217 card, three digital outputs with the 9472 card, three analog outputs with the 9263, and eight analog inputs with the 9237 cards.
I wrote a simple program to test one digital output task, two of the analog output tasks, and a single analog input task. I put all of them in the same while loop, and it worked perfectly. However, when I add analog input tasks to the same loop, I get an error 200022. So I tested each sensor individually by changing the channel before each run. I searched error 200022 and found that this is because I cannot start another analog input task until the previous one ends. With this said, I don’t know how to acquire an analog voltage in the same task as an analog RTD voltage. Both inputs take different constants in the start task DAQmx icon.
Attached is my test program. It is titled “Test All”. This is the program I used to test the various sensors. I tested the input sensors one at a time, and it worked fine. A few tasks are written just to test functionality, and will be added to later. The data is only displayed on the screen. I will add triggers and data write to disk functions later. This program works now, but if I add more analog inputs, it will generate the 200022 error.
Can someone show me how to correctly write the code for multiple inputs and outputs using DAQmx? All training materials and tutorials I can find all show a single input or single output, not multiples of each. Thanks for looking.
-Randy
Attachments:
TestAll-NI.vi 32 KBHi RandyC,
The Knowledge Base article Using Different Types of DAQmx Global Channels in the Same Task goes into a little more depth of what Bryan is talking about, and it also includes some example code to help show what to do.
Hope that helps, -
LSMW or ABAP Program:- I need BAPI function module or Direct input program
hi experts,
I have to develop the program which uploads the transportation pricing data for freight cost management.
the transcation code is XK15 for the application A.
There is a program called RV14BTCI which will uploads for the application V or M not for A.
So i can use lsmw or direct input program in both lsmw and abap program so plz help me if there is any BAPI function module or Direct input program for Application A.
thank you,
waiting for u r reply.
Edited by: SANTOSH MARUPALLY on Jan 22, 2008 6:27 AMHi Santosh
Am not really sure if RV14BTCI can not be used for other applications apart from V and M.
You can try using BAPI: BAPI_PRICES_CONDITIONS. Over the forum you can find few example coding.
Regards
Eswar -
Sending file using sockets (difficult)
Hi, i have the following section of code
(of which i am not claiming ownership) which
implements a DCC Send command from irc.
It accomplishes this using sockets, and while
i understand how the code accomplishes what it
does, i need help with a possible modification.
Basically what i am looking to do is keep track
of the progress of the send - so that the
user can at any time see how much of the file
has been sent and how much is remaining.
If anyone has done such a thing in the past or
has a good idea as to how this should be implemented,
i would be greatful for their help.
Here is the code:
new Thread() {
public void run() {
try {
ServerSocket ss = new ServerSocket(0);
ss.setSoTimeout(timeout);
int port = ss.getLocalPort();
//byte[] ip = ss.getInetAddress().getAddress();
byte[] ip = InetAddress.getLocalHost().getAddress();
long ipNum = 0;
long multiplier = 1;
for (int i = 3; i >= 0; i--) {
int byteVal = (ip[i] + 256) % 256;
ipNum += byteVal*multiplier;
multiplier *= 256;
// Rename the filename so it has no whitespace in it when we send it.
// .... I really should do this a bit more nicely at some point ....
String safeFilename = file.getName().replace(' ', '_');
safeFilename = safeFilename.replace('\t', '_');
// Send the message to the user, telling them where to connect to in order to get the file.
sendCTCPCommand(nick, "DCC SEND " + safeFilename + " " + ipNum + " " + port + " " + file.length());
// The client may now connect to us and download the file.
Socket socket = ss.accept();
socket.setSoTimeout(30000);
// Might as well close the server socket now; it's finished with.
ss.close();
BufferedOutputStream output = new BufferedOutputStream(socket.getOutputStream());
BufferedInputStream input = new BufferedInputStream(socket.getInputStream());
BufferedInputStream finput = new BufferedInputStream(new FileInputStream(file));
byte[] outBuffer = new byte[bufferSize];
byte[] inBuffer = new byte[4];
int bytesRead = 0;
while ((bytesRead = finput.read(outBuffer, 0, outBuffer.length)) != -1) {
output.write(outBuffer, 0, bytesRead);
output.flush();
input.read(inBuffer, 0, inBuffer.length);
output.close();
input.close();
log("+++ DCC SEND Completed to " + nick + " (" + file.getPath() + ")");
}You already have the necessary code to find the number of bytes sent at any point during the transmission. You can find out the size of the file by instantiating a RandomAccessFile before you send it, and querying for the file length.
I suggest you make the file size and bytes sent volatile and conveniently accessible to another thread (best implemented here as an inner class?). Your new thread will need to monitor the file transfer at intervals to update the progress indicator. You can generate estimates of time remaining by measuring the average transmission rate, and extrapolating using the total file size. Classically this is done using an average, but you might be better just maintaining a list of fairly recent samples, allowing for the speed swings inherent in internet connections.
How you update the progress indicator from your monitor thread is up to you. I suggest exposing methods in the UI for setting the progress and time remaining, and simply update them from the monitor.
Does this help any? -
How to write a Mail Java program without using the JavaMail api?
Can I do that?
if so, which classes should be used?
and how can i use Javamail to write a program which
allows me to write Email.You can open up raw sockets to an SMTP server to send email.
Here is one article that has code for how to send email using sockets.
http://www.javaworld.com/jw-12-1996/jw-12-sockets.html -
Connect applet to server port using sockets? Please help!!!
I am trying to connect a java applet to game1.pogo.com:5285 which is their gaming port. I want to make it connect from my website which is ucichess.com
The applet can be found here: http://ucichess.com/index.html and the java console gives me a bunch of weird errors if u can take a look at it:
network: Disconnect connection to http://ucichess.com/applet/chess2/com/pogo/util/thin/e.class
network: Cache entry found [url: http://ucichess.com/applet/chess2/com/pogo/util/thin/m.class, version: null]
network: Connecting http://ucichess.com/applet/chess2/com/pogo/util/thin/m.class with proxy=DIRECT
network: ResponseCode for http://ucichess.com/applet/chess2/com/pogo/util/thin/m.class : 304
network: Encoding for http://ucichess.com/applet/chess2/com/pogo/util/thin/m.class : null
network: Disconnect connection to http://ucichess.com/applet/chess2/com/pogo/util/thin/m.class
network: Connecting socket://ucichess.com:5285 with proxy=DIRECT
Sun Jul 22 17:14:24 EDT 2007 Thread-198 ArenaServiceThin.error
Sun Jul 22 17:14:24 EDT 2007 Thread-198 exception
java.net.ConnectException: Connection refused: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(Unknown Source)
at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at com.pogo.besl.thin.c.<init>(SourceFile)
at com.pogo.besl.thin.a.<init>(SourceFile)
at com.pogo.besl.arena.a.g(SourceFile)
at com.pogo.besl.arena.a.a(SourceFile)
at com.pogo.game.arena.chat.ChatArenaApplet.a(SourceFile)
at com.pogo.game.arena.chat.ChatArenaApplet.b(SourceFile)
at com.pogo.client.ping.b.run(SourceFile)
network: Connecting http://ucichess.com/blank.html?confuser=-6956021725811422401 with proxy=DIRECT
Applet.terminate(false, false)
ChatArenaApplet.disposeLocals(false)
InvalQueue thread exiting: InvalQueue-1-com.pogo.ui.a[panel8,0,0,458x403,invalid]
ChatArenaApplet.disconnect()
Applet.disposeLocals(false) - ChessTable
network: Cache entry not found [url: http://ucichess.com/applet/chess2/META-INF/assets.txt, version: null]
network: Connecting http://ucichess.com/applet/chess2/META-INF/assets.txt with proxy=DIRECT
basic: Stopping applet ...
basic: Removed progress listener: sun.plugin.util.GrayBoxPainter@106433d
basic: Finding information ...
basic: Releasing classloader: sun.plugin.ClassLoaderInfo@35dc95, refcount=0
basic: Caching classloader: sun.plugin.ClassLoaderInfo@35dc95
basic: Current classloader cache size: 2
basic: Done ...
basic: Joining applet thread ...
basic: Destroying applet ...
basic: Disposing applet ...
basic: Quiting applet ...
ChatArenaApplet.disposeGlobals()
Timer thread exiting: ScrollbarButtonRepeater
network: Cache entry found [url: http://ucichess.com/applet/chess2/com/pogo/ui/b.class, version: null]
basic: Joined applet thread ...
network: Connecting http://ucichess.com/applet/chess2/com/pogo/ui/b.class with proxy=DIRECT
network: ResponseCode for http://ucichess.com/applet/chess2/com/pogo/ui/b.class : 304
network: Encoding for http://ucichess.com/applet/chess2/com/pogo/ui/b.class : null
network: Disconnect connection to http://ucichess.com/applet/chess2/com/pogo/ui/b.class
network: Cache entry found [url: http://ucichess.com/applet/chess2/com/pogo/ui/q.class, version: null]
network: Connecting http://ucichess.com/applet/chess2/com/pogo/ui/q.class with proxy=DIRECT
network: ResponseCode for http://ucichess.com/applet/chess2/com/pogo/ui/q.class : 304
network: Encoding for http://ucichess.com/applet/chess2/com/pogo/ui/q.class : null
network: Disconnect connection to http://ucichess.com/applet/chess2/com/pogo/ui/q.class
Applet.disposeGlobals - ChessTable
Applet.terminate completed
Is it possible for me to host the applet on my server and connect it to a remote server using sockets and verification or is that against java security?
Applet.stop - ChessTable
Applet.stop completed - ChessTable
Applet.destroy - ChessTable
Applet.destroy completed - ChessTable
ChatArenaApplet.disconnect()Hi yoshistr, have you resolved your issue? If you have, do you mind sharing it with me?
Thanks. -
Problem in getting data into database with standard direct input program
HI All,
I am having problem which is not updating the records in MM01 or MM02 with standard direct input program. i have data in internal table. from that table i am trying to upload into database by using background job MRP_MATERIAL_MASTER_DATA_LOAD.
when i execute my program it is showing message job is started. then i go into sm37 and seethe job status by executing. there also i am seeing job completed succesfully.
but if i go to mm03 and find the materials are updated or created there i couldn't find the material numbers which are from internal table.
So if ny one help me it wil be great.
Thanks in Advance
Venkat NHi Anil,
Thanks for your answer, but i am facing problem is i have material no and denominator and Actual UOM and nominator field values in the flat file.....
by using RMDATIND direct input program with MRP_MATERIAL_UPLOAD as job name for background job while uploading data into database.
here i am not getting data in to database, but when i execute the job in sm37 it is showing that message job processing successfully completed...this is my status..
if u can help me in this it will be gr8ful..
Thanks,
Venkat N
Maybe you are looking for
-
How to eliminate unwanted text in Form
hi, How to eliminate unwanted text in Form. Regrds, bbr.
-
Problem Setting up lion OD Replica
Dear Community, i have some big troubles in setting up the Open Directory Replication to another mac mini i7 Lion Server. The directory was set up on the first mac mini i7 Lion Server without any problems. It's possible to join the directory from ano
-
The Scope of Customers,Suppliers,.....
hi all in our company we setup 1 Set of books, 1 Legal Entity , 1 Operating Unit i want to know the Scope of the customers displayed in Sales Order , Suppliers Displayed in PO, Bank Accounts , items , ........ these things displayed at level of SOB O
-
Looking for a way to add more signatures
I'm creating a form that has a standard orginator and approver signature blocks. Is there a button or another way to add additional approver signature blocks if needed? Any help on this would be greatly appreciated. Thanks!
-
Exception while using XA driver for Oracle 9.0.1 with WL Integration 7.0
java.sql.SQLException: ORA-06550: line 1, column 13: PLS-00201: identifier 'JAVA_XA.XA_START_NEW' must be declared ORA-06550: line 1, column 7: PL/SQL: Statement ignored at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:180) at oracle.jd