Sockets!?!?!?!?!?!


 
Thread Tools Search this Thread
Top Forums Programming Sockets!?!?!?!?!?!
# 1  
Old 08-11-2003
Error Sockets!?!?!?!?!?!

I am looking for a way to have a program listen on a port (example: 8000) for communication I will be sending via that port to it(Linux Kernel machine). Once it recieves an appropiate command I need it to run a .bat file in linux.

I know what I need to do but I am running into a few problems:

1. I do not know [B][U]how[\B][\U] to listen to a socket in C

2. I do not know [B][U]how[\B][\U] to run a .bat file from C

As mention above my OS is Linux Kernel on the machine that will need to listen to the port.

Suggestion or solution are greatly appreciated, code would be even more greatly appreciated.

Thanks
# 2  
Old 08-11-2003
1. http://www.ecst.csuchico.edu/~beej/guide/net/

2. A .bat file? Isn't it on M$ only?

A batch file on unix is a shell script. A shell script has different syntax as M$ DOS batch files and in general you can't run a batch file directly on unix. Give the shell script file a 700 chmod. To run a shell script from C, read the system(3) manpage.
# 3  
Old 08-11-2003
Question

1. Looking at it

2. ???????? What system(3) manpage ????? (Note I did mean .sh not .bat, force of habbit that I but .bat down, sorry)

Thanks
# 4  
Old 08-12-2003
Read the system(3) manpage by typing

man 3 system

- or may be -

man system

on your command line and read the description inside on using system().

Alternatively, a better way may be to fork() a new process and use execl() to execute it. I can't give you examples on it right now. You ought to find some examples on google by typing fork and execl.

Last edited by cbkihong; 08-12-2003 at 12:49 AM..
# 5  
Old 08-12-2003
listener

Ok I found some information on running Unix commands from C so that is good now back to the main topic, I spent some time and looked at Beej and I went from somewhat confused to totally confused on a number of points.

1. When some of the methods are called the variables used are sometimes not declared in his examples, which is confusing the heck out of me.

2. It only shows starting the listener by the method listen(), but my confusion is that after you declare how long does it listen before it stops?

3. In order to recieve, which I am assuming would be in the same program and after the listener is started, does it continue looking for something to recieve before it moves on, or do I need to put it into some sort of loop?

4. Off topic now but still very much needed. Can I compile a C program in windows and then transfer it over to a linux machine to run? Reason for this is because the linux machine I have doesn't have enough memory for a compiler.

Any suggestions or solutions are greatly appreciated.

Thanks
# 6  
Old 08-12-2003
That guide is somewhat recommended by many college courses on Unix network programming. That's why I gave you this link.

1. Really? When I read it some time ago I didn't recall I saw this problem. Perhaps a few places may be. I may help clarify if you give me exactly where the omissions go. By the way, they're functions, not methods. When you talked about methods I did take some time wondering what you meant.

2. listen() lasts until you teardown the socket.

The chapter describing the functions do not have full examples. On the next chapter (Client-Server Background) you'll find examples in full that you can try on your system.

3. Assuming you're using TCP (not datagrams). Once a server accept() a connection, from the accept(2) manpage, "it creates a new connected socket with mostly the same properties as s, and allocates a new file descriptor for the socket, which is returned." You can then use recv() on this returned socket (not the one which you called listen() on!) to receive data. You'll need to allocate a buffer, and very likely you should put it in a loop to get the incoming data in chunks. Somewhere in the document it mentioned encapsulating your data by putting a header indicating the length of data. You can use this scheme to decide whether you would like to make a dynamic buffer which fits all the data, for instance so you don't need multiple recvs.

4. Theoretically you can, by using a cross-compiler, then one can compile a Unix C program on Windows or vice versa. I don't have any experience on gcc cross-compilers though, so you may need a search on google for this.
# 7  
Old 08-12-2003
Computer Thanks!! More questions

Thanks for the info, looks good. I actually found some better a better example and wrote the code below, if your interested. (Note there will be a few changes once I compile, I'm almost absolutely sure on that). Now comes the big questions:

1. How can I get the program to startup when the linux kernel starts up(keep in mind it is only a does prompt, like unix)?

2. Where can I find a C compiler?

I know that at least one of them is probably easy, but my only excuse is that it has been a very long day.

Thanks for all your assistance.


Code:
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

int main()
{
 int sockfd, newsockfd, clilen, n;
 int portno = 8010;
 char buffer[256];
 struct sockaddr_in serv_addr,cli_addr;
 
 sockfd = socket(AF_INET, SOCK_STREAM, 0);
 if(sockfd < 0)
 {
  error("ERROR opening socket");
 }
 bzero((char *) &serv_addr, sizeof(serv_addr));
 
 serv_addr.sin_family = AF_INET;
 serv_addr.sin_port = htons(portno);
 serv_addr.sin_addr.s_addr = INADDR_ANY;
 
 if(bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0)
 {
  error("ERROR on binding");
 }
 while(1==1)
 {
  listen(sockfd,5);
  clilen = sizeof(cli_addr);
  newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen);
  if(newsockfd < 0)
  {
   error("ERROR on accept");
  }
  bzero(buffer,256);
  n = read(newscokfd, buffer, 255);
  if(n < 0)
  {
   error("ERROR reading from socket");
  }
  else
  {
   system("./RunFile.sh");
   n = write(newsockfd,"Success",7);
   if(n < 0)
   {
    error("ERROR writing to socket");
   }
  }
 }
 return 0;
}

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Programming

Any example about sockets in C++?

Hi, i am student, think learning about c++, someone has a example the how establish a conection with sockets :b::b: (1 Reply)
Discussion started by: mmartinez
1 Replies

2. Red Hat

Sockets

hai guys, I'm doing a project in which one server communicates with several clients. How can i do it when i have different port numbers???:confused: (0 Replies)
Discussion started by: rajeshb6
0 Replies

3. Programming

Help with sockets in C

if i have a server which wants to connect to exactly 5 clients, does that mean i need 5 socket file descriptors and use listen(socket_fd,1); for each one or just do listen(socket_fd,5) also whats the second parameter number mean? what happens if i put 0 there? also if i am connected... (28 Replies)
Discussion started by: omega666
28 Replies

4. Programming

Sockets

Hi,i now moved into a different section where i need to use sockets. i am completely nill in sockets. can some body please provide me what are the requirements for a socket. to use sockets in c. thanks (1 Reply)
Discussion started by: MrUser
1 Replies

5. Programming

need help with sockets

anyone and teach me how to save standard output to a file in a client/server socket. I know how to read them to the screen but i'm not quite sure how to save them to a file. my read to screen file code: memset(line, 0x0, LINE_ARRAY_SIZE); while (recv(connectSocket, line, MAX_MSG, 0) >... (1 Reply)
Discussion started by: crunchyuser
1 Replies

6. IP Networking

sockets and firewall

Is it possible to trace the packages and the statuses of client's and/or server's sockets by the UNIX network administrative tools? Two applications interact via sockets. There is no problem if they stay in the same network segment. If their hosts connected through the firewall then they aren't... (4 Replies)
Discussion started by: gogogo
4 Replies

7. Solaris

Sockets in use

Is there a way to see what sockets are in use? The developers here are getting some defunct processes and they would like to get a socket list. This is on a Solaris 8 machine. Thanks! (1 Reply)
Discussion started by: kjbaumann
1 Replies

8. UNIX for Dummies Questions & Answers

sockets

how do i mointor how many sockets are opened from a particular foriegn address? (2 Replies)
Discussion started by: kirpond
2 Replies

9. Programming

sockets

Hai, How cani declare socket and collect the data in a string varialbe. Since i am new to this i am asking this. Can we connect multiple port. Thank you. (6 Replies)
Discussion started by: arunkumar_mca
6 Replies

10. Programming

sockets...

Hi ! I had a verry simple question to ask... In unix when we create pipes.. the unnamed pipes that is... is there any way to access those pipes outside the code ? Another thing.. do sockets have an entry in the inode table ? TIA, Devyani. (1 Reply)
Discussion started by: devy8
1 Replies
Login or Register to Ask a Question