Training, Open Source computer languages
PerlPHPPythonMySQLApache / TomcatTclRubyJavaC and C++LinuxCSS 
Search for:
Home Accessibility Courses Diary The Mouth Forum Resources Site Map About Us Contact
 
For 2023 (and 2024 ...) - we are now fully retired from IT training.
We have made many, many friends over 25 years of teaching about Python, Tcl, Perl, PHP, Lua, Java, C and C++ - and MySQL, Linux and Solaris/SunOS too. Our training notes are now very much out of date, but due to upward compatability most of our examples remain operational and even relevant ad you are welcome to make us if them "as seen" and at your own risk.

Lisa and I (Graham) now live in what was our training centre in Melksham - happy to meet with former delegates here - but do check ahead before coming round. We are far from inactive - rather, enjoying the times that we are retired but still healthy enough in mind and body to be active!

I am also active in many other area and still look after a lot of web sites - you can find an index ((here))
Wait time in a socket connection

Posted by kinshuk_mishra (kinshuk_mishra), 18 March 2003
Hi All,

I am facing one problem related to sockets. Here is the details....


Problem:

I have 3 machines in which 2 of them i have made as client and one as server. On each client I have opened one socket connection and listening at unique port.  On server side also I have opened one uique port and listening to clients.

Now When ever server requires some information from the client it connects to that port and gets the required information on the socket which is open. Presently I am saving the information from the socket(server side)  into a file and then reading the file from within my script. I need to change this to a variable since using persistant storage device is creating problems when scripts are running for long time. In this case I have to use 2 TCL shells since one shell uses sockets and waits for the client and other is used to run all my scripts.

The problem in current (File) case is that my server is running in different TCL shell and scripts are running on different TCL shell so i cannot use variables between them.

The idea what I got is that on client side I will open the sockets in vwait loop but on server side I want that server should wait on unique port only when information is requred by the server from clients. I will open the connection when information is required. This will help me in the case that I will have same shell which will wait with open socket and which will run my scripts also. I tried the same with certain combinations but it is not working. If some body has an idea then please let me know. I only want that connection should wait till the time there is some data in the socket and after that it should return back to the scripts.

Posted by admin (Graham Ellis), 19 March 2003
I think this is a continuation of the previous application you have been posting about - you're running on a Windows box, expect (so Tcl 8.0) in the clients, and a more recent version for the server?

I would tend to pass the information across the socket connection rather than using a file; with a file, you'll have all sorts of problems if information is being written by one process while it's being read by another unless you write a sophisticated locking protocol on the socket - and there's no point in doing that when you can simply pass the information across.

I'm a little nervous that you describe your clients as listening (only a server listens in the technical sense), and that you describe vwait as a loop which it really isn't.   Do you by any chance have a copy of "Practical Programming in Tcl and Tk"?   The third edition has an excellent section on socket programming, and the topics you're asking about are covered on pages 227 to 230.  See
http://www.wellho.net/book/0-13-022028-0.html.

In brief, I think that your main server program needs to be a loop which listens for and accepts connections, putting each connection into a vwait on a different variable (use an array of variables?).  

Posted by kinshuk_mishra (kinshuk_mishra), 19 March 2003
Hi Ellis,  

First of all thank you very much for the hint. Actually the hint you gave me in your reply helped me a lot and I was able to integrate my connection into one shell.

This is what I did...
############

Now using the three machines, I configured 2 of the machines as servers and opened one port on which these machines were listening to the clients...

Third machine which is the main machine and which does most of the processing is now client and whenever I requre some thing from the servers I simply send the request on the port and servers revert back on the same socket connection. This is what I wanted. Now after sending the request to the server I am waiting on that particular socket to get the reply and whenevr I get the reply I close the socket.



This page is a thread posted to the opentalk forum at www.opentalk.org.uk and archived here for reference. To jump to the archive index please follow this link.

You can Add a comment or ranking to this page

© WELL HOUSE CONSULTANTS LTD., 2024: Well House Manor • 48 Spa Road • Melksham, Wiltshire • United Kingdom • SN12 7NY
PH: 01144 1225 708225 • FAX: 01144 1225 793803 • EMAIL: info@wellho.net • WEB: http://www.wellho.net • SKYPE: wellho