Sockets em C

3 respostas
F

dae galera,

to tentando aprender a usar sockets em C, eu fiz esse codigo (no linux):

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define MAX 10
#define BUFFER 1024
#define MSG "SUCESSO!\n"
int main(){
 struct sockaddr_in addr;
 int serverSocket, socket, length, i;
 char buffer[BUFFER];
 serverSocket = socket(AF_INET, SOCK_STREAM, 0);
 if (serverSocket == -1){
  printf("Ocorreu um erro ao abrir serverSocket!\n");
  exit(1);
 }
 addr.sin_family = AF_INET;
 addr.sin_port = htons(12345);
 addr.sin_addr.s_addr = INADDR_ANY;
 memser(&(addr.sin_zero), '[code]
#include &lt;stdio.h&gt;
#include &lt;sys/types.h&gt;
#include &lt;sys/socket.h&gt;
#include &lt;netinet/in.h&gt;
#define MAX 10
#define BUFFER 1024
#define MSG &quot;SUCESSO!\n&quot;
int main&#40;&#41;&#123;
 struct sockaddr_in addr;
 int serverSocket, socket, length, i;
 char buffer&#91;BUFFER&#93;;
 serverSocket = socket&#40;AF_INET, SOCK_STREAM, 0&#41;;
 if &#40;serverSocket == -1&#41;&#123;
  printf&#40;&quot;Ocorreu um erro ao abrir serverSocket!\n&quot;&#41;;
  exit&#40;1&#41;;
 &#125;
 addr.sin_family = AF_INET;
 addr.sin_port = htons&#40;12345&#41;;
 addr.sin_addr.s_addr = INADDR_ANY;
 memser&#40;&amp;&#40;addr.sin_zero&#41;, '\0', 8&#41;;
 if &#40;bind&#40;serverSocket, &#40;struct sockaddr *&#41;&amp;addr, sizeof&#40;struct sockaddr_in&#41;&#41; == -1&#41;&#123;
  printf&#40;&quot;Ocorreu um erro ao chamar bind&#40;&#41;!\n&quot;&#41;;
  exit&#40;1&#41;;
 &#125;
 if &#40;listen&#40;serverSocket, MAX&#41; == -1&#41;&#123;
  printf&#40;&quot;Ocorreu um erro ao chamar listen&#40;&#41;!\n&quot;&#41;;
  exit&#40;1&#41;;
 &#125;
 printf&#40;&quot;Aguardando conexao...\n&quot;&#41;;
 socket = accept&#40;serverSocket, NULL, NULL&#41;;
 if &#40;socket == -1&#41;&#123;
  printf&#40;&quot;Ocorreu um erro ao chamar accept&#40;&#41;!\n&quot;&#41;;
  exit&#40;1&#41;;
 &#125;
 printf&#40;&quot;Conectado!\n&quot;&#41;;
 printf&#40;&quot;Recebendo dados...\n&quot;&#41;;
 length = recv&#40;socket, &#40;void *&#41;buffer, BUFFER, MSG_WAITALL&#41;;
 printf&#40;&quot;%d bytes foram recebidos&#58;\n&quot;&#41;;
 for &#40;i = 0; i &lt; BUFFER; i++&#41; printf&#40;&quot;%c&quot;, buffer&#91;i&#93;&#41;;
 printf&#40;&quot;\n\n&quot;&#41;;
 printf&#40;&quot;Enviando resposta...\n&quot;&#41;;
 sprintf&#40;buffer, MSG&#41;;
 length = send&#40;socket, buffer, strlen&#40;buffer&#41;, MSG_OOB&#41;;
 printf&#40;&quot;%d bytes foram enviados.\n&quot;, length&#41;;
 printf&#40;&quot;Sucesso!&quot;&#41;;
 return 0;
&#125;
', 8); if (bind(serverSocket, (struct sockaddr *)&addr, sizeof(struct sockaddr_in)) == -1){ printf("Ocorreu um erro ao chamar bind()!\n"); exit(1); } if (listen(serverSocket, MAX) == -1){ printf("Ocorreu um erro ao chamar listen()!\n"); exit(1); } printf("Aguardando conexao...\n"); socket = accept(serverSocket, NULL, NULL); if (socket == -1){ printf("Ocorreu um erro ao chamar accept()!\n"); exit(1); } printf("Conectado!\n"); printf("Recebendo dados...\n"); length = recv(socket, (void *)buffer, BUFFER, MSG_WAITALL); printf("%d bytes foram recebidos:\n"); for (i = 0; i < BUFFER; i++) printf("%c", buffer[i]); printf("\n\n"); printf("Enviando resposta...\n"); sprintf(buffer, MSG); length = send(socket, buffer, strlen(buffer), MSG_OOB); printf("%d bytes foram enviados.\n", length); printf("Sucesso!"); return 0; } [/code]

mas qndo eu vou compilar, da esse erro:

felipe@felipe:~/projetos/teste/C$ gcc teste.c -o teste
teste.c: In function `main':
teste.c:12: error: called object is not a function

a linha 12 eh essa:

serverSocket = socket(AF_INET, SOCK_STREAM, 0);

alguem sabe como arrumar isso?

vlw

3 Respostas

R

Opa!
Repare que na linha onde vc declara os inteiros vc coloca uma variavel com o nome de “socket” e chama uma função com o mesmo nome.
Acerta isso pra ver se funciona, ok?

[]'s

F

na mosca :grin:

eu nao tinha me dado conta desse pequeno detalhe…

valeu a ajuda!

R

q isso felipe… quer fazer trojan pra linux? :lol:

Criado 29 de janeiro de 2005
Ultima resposta 30 de jan. de 2005
Respostas 3
Participantes 3