Avatar billede moxa Nybegynder
01. marts 2006 - 12:46 Der er 8 kommentarer og
2 løsninger

Sockets i C

Hejsa.
Jeg sidder og roder med at kunne opsætte og benytte sockets i C på en lille linux platform, men jeg kan sgutte finde nogen virkende eksempler nogen steder. Der er (mindst) 1 eksisterende spørgsmål om dette, hvor svaret linker til http://www.linuxsocket.org/ og denne side eksisterer ikke længere :s så... jeg håbede lidt på, der var nogen derude, der sidder med gode links til dette? :P
tak :)
Avatar billede dennismp Nybegynder
01. marts 2006 - 12:54 #1
Der er ret mange. Prøv at google efter "bsd sockets". Jeg fandt bl.a: http://www.ecst.csuchico.edu/~chafey/prog/sockets/sinfo1.html
http://www.frostbytes.com/~jimf/papers/sockets/sockets.html

Mon ikke der er nok der, til at komme igang :)
Avatar billede moxa Nybegynder
01. marts 2006 - 13:09 #2
tak - kigger det lige igennem :P
Avatar billede arne_v Ekspert
01. marts 2006 - 14:14 #3
jeg har postet kode her masser af gange

et af dem:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

#include <sys/socket.h>
#include <fcntl.h>
#include <netdb.h>
#include <errno.h>

void mailsend(char *hostname,char *to,char * from,char *subj,char *body)
{
  int sd,status,tmp;
  char *buf,ownhost[100];
  struct sockaddr local,remote;
  struct hostent *hostinfo;
  /* create socket */
  sd=socket(AF_INET,SOCK_STREAM,0);
  if(sd<0) {
      printf("Error creating socket: %s\n",strerror(errno));
      goto fin;
  }
  /* bind socket */
  local.sa_family=AF_INET;
  memset(local.sa_data,0,sizeof(local.sa_data));
  status=bind(sd,&local,sizeof(local));
  if(status<0) {
      printf("Error binding socket: %s\n",strerror(errno));
      goto fin;
  }
  /* lookup host */
  hostinfo=gethostbyname(hostname);
  if(!hostinfo) {
      printf("Error looking up host: %s\n",hostname);
      goto fin;
  }
  /* connect to host */
  remote.sa_family=hostinfo->h_addrtype;
  memcpy(remote.sa_data+2,hostinfo->h_addr_list[0],hostinfo->h_length);
  *((short *)remote.sa_data)=25;
  tmp=remote.sa_data[0];
  remote.sa_data[0]=remote.sa_data[1];
  remote.sa_data[1]=tmp;
  status=connect(sd,&remote,sizeof(remote));
  if(status!=0) {
      printf("Error connecting to host: %s port: %d\n",hostname,25);
      goto fin;
  }
  /* send email */
  gethostname(ownhost,sizeof(ownhost));
  buf = malloc(2000+strlen(body));
  sprintf(buf,"HELO %s\r\n"
              "MAIL FROM: <%s>\r\n"
              "RCPT TO: <%s>\r\n"
              "DATA\r\n"
              "Return-Path: <%s>\r\n"
              "From: %s\r\n"
              "To: %s\r\n"
              "Subject: %s\r\n"
              "MIME-version: 1.0\r\n"
              "Content-type: text/html; Charset=iso-8859-1\r\n"
              "\r\n"
              "%s\r\n"
              ".\r\n"
              "QUIT\r\n",ownhost,from,to,from,from,to,subj,body);
  status=send(sd,buf,strlen(buf),0);
  if(status<0) {
      printf("Error sending GET request\n");
      goto fin;
  }
  free(buf);
fin:
  close(sd);
  return;
}

int main(int argc,char *argv[])
{
  mailsend("minmailserver", "dig@ditdomain.dk", "mig@mitdomain.dk", "Dette er en  test", "<a href='http://www.eksperten.dk/'>E</a>");
  return 0;
}
Avatar billede ttn.bonk Nybegynder
03. marts 2006 - 21:27 #4
Hej,

jeg har flere gange brugt Beej guide som jeg nu ser findes i en dansk udgave:

http://retel.dk/bgnet/bgnet.html

Skriv guiden ud, brug en halv time på at læse den. Den er fremragende
godt skrevet. Jeg har brugt varianter af eksemplerne flere gange
under Windows, og det selvom de mest er skrevet til Unix/Linux.

Og det er ren C-kode.

Mvh Torben.
Avatar billede moxa Nybegynder
06. marts 2006 - 14:24 #5
Tak for hjælpen alle tre - alle gode og hjælpsomme.
ttn.bonk - ja, den guide er nice :)
Avatar billede moxa Nybegynder
06. marts 2006 - 14:25 #6
(hvordan tildeler jeg points? :s lol)
Avatar billede arne_v Ekspert
06. marts 2006 - 14:59 #7
du beder os alle 3 ligge et svar, markerer alle 3 og klikker accepter

her er fra mig
Avatar billede dennismp Nybegynder
06. marts 2006 - 19:43 #8
.. og et herfra
Avatar billede moxa Nybegynder
10. marts 2006 - 13:35 #9
ville gerne have givet 15 points til hver, men ttn.bonk havde ikke angivet noget svar... :s
Avatar billede ttn.bonk Nybegynder
17. marts 2006 - 01:02 #10
Hm,

kan åbenbart ikke lægge et svar (kun lave en kommentar).
Men det er også ligemeget, går ikke så meget op i det :-).

Så luk du bare uden point til mig.

Mvh Torben.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester