Sign in to follow this  

Storage size of their isnt known... Sockets in linux C#

Recommended Posts

peb    134
Okay i have this code:
#include <stdio.h> #include <stdlib.h> #include <errno.h> #include <string.h> #include <netdb.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> /* Yes there are allot of header files but you will need them all! */ #define PORT 6666 /* This will be the port that your client will connect to on the remote machine. If this client wants to connect to Telnet then you would use port 23, FTP port 21, and the list goes on, make sure if you write a server then you make the ports in the 4 digit range so not to interfer with other network programs. */ #define MAXDATASIZE 100 /* This is the maximum size of information that can be recieved at a time from the server. */ int main(int argc, char *argv[]) { int sock_fd, numbytes; /* Creates a socket file descriptor for data exchange, numbytes holds the number of bytes recieved from the server. */ char buffer[MAXDATASIZE]; /* This holds all the information sent from the server. */ struct hostent *he; /* This structure is used to get the IP address from a hostname. */ struct SockAdder Their; /* This is the structure you created to hold information about the stream you will be using. */ if(argc != 2) { /* This checks to make sure that the right amount of arguements were passed on the command line. */ fprintf(stderr, "usage: client hostname\n"; exit (1); } if((he=gethostbyname(argv[1])) == NULL) { herror("gethostbyname"); exit (1); } /* socket() - This is always the first part of a connection. You will notice that the connections will be built by if statements. The above if statement should be used if you think the user might type in a domain name like... "" instead of an IP address. Then to create an internet connection using the TCP protocol type this next if statement. */ if((sock_fd=socket(AF_INET,SOCK_STREAM,0)) == -1) { perror("socket"); exit (1); } /* This is the information that will be used to make a connection. just leave it like this everytime, unless you working with UDP (not covered in this tutorial) then you would use SOCK_DGRAM in place of the SOCK_STREAM, I do it this way to make it more readable. */ Their.Family = AF_INET; /* This is the socket address family, This text only covers AF_INET connections so if you want more info type 'man socket' at your linux prompt. */ Their.Port = htons(PORT); /* This is the port your client will be connecting to. For the most part this will always be the same. Just always remember to define your port at the beginning of your program. Or if you want a user specified port you could use... unsigned int PORT = argv[3]; just after main(). Depending on the program you might have to change the htons() to htonl() or something else, you can read up on that in a Networking Guide. */ Their.Address = *((struct in_addr *)he->h_addr); /* This is the address of the person your connecting to for the most part this will stay the same too. */ bzero(&(Their.Zero), 8); /* Don't ask just add it here everytime! */ if(connect(sock_fd, (struct sockaddr *)&Their, sizeof(struct sockaddr)) == -1) { /* This creates a full 'handshake' connection to the remote host. ALL TCP CLIENT PROGRAMS WILL HAVE THIS! */ perror("connect"); exit (1); } if((numbytes=recv(sock_fd,buffer,MAXDATASIZE,0)) == -1) { /* I will explain this a bit. recv() gets information from the server through your file descriptor(sock_fd) and places as much as it can, determined by MAXDATASIZE, into 'buffer'. Then the number of bytes placed into 'buffer' is placed into 'numbytes'. */ perror("recv"); exit (1); } buffer[numbytes] = '\0'; /* A lacking carrage return is placed at the end of the buffer. */ printf("> %s", buffer); /* prints all information in the buffer to the screen. */ close(sock_fd); /* closes the connection */ return (0); }
and i get this errors Storage size of 'Their' isn't known. i get the error on this line: struct SockAdder Their; The tutorial that i read told me to put this in /usr/include/sys/socket.h right after osockaddr.. struct SockAddr { short int Family; unsigned short int Port; struct in_addr Address; unsigned char Zero[8]; }; thx

Share this post

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this