none
ошибка при написании простого клиента и сервера tcp/ip RRS feed

  • Вопрос

  • решил разобраться как написать  клиент и сервер по книге Снейдера. При компиляции сервера выкидывает oshibka vyzova socket: Error 0

    Помогите пожалуйста исправить ошибку.

    Вот сервер:

    #include <vcl.h>
    #include <winsock2.h>
    #include <stdio.h>
    #include <conio>
    #pragma hdrstop
    
    //---------------------------------------------------------------------------
    
    #pragma argsused
    int main(void)
    {struct sockaddr_in local;
     int s;
     int s1;
     int rc;
     char buf[1];
     local.sin_family=AF_INET;
     local.sin_port=htons(7500);
     local.sin_addr.s_addr=htonl(INADDR_ANY);
     s=socket(AF_INET, SOCK_STREAM, 0);
     if (s<0)
      {
      perror("oshibka vyzova socket");
      exit(1);
      }
    
     rc=bind(s,(struct sockaddr *)&local, sizeof(local));
     if (rc<0)
      {
      perror("oshibka vyzova bind");
      exit(1);
      }
    
     rc=listen(s,5);
     if (rc)
      {
      perror("oshibka vyzova listen");
      exit(1);
      }
    
     s1=accept(s, NULL, NULL);
     if (s1<0)
      {
      perror("oshibka vyzova accept");
      exit(1);
      }
    
     rc=recv(s1, buf, 1, 0);
     if (rc<=0)
      {
      perror("oshibka vyzova recv");
      exit(1);
      }
     printf("%c\n, buf[0]");
     rc=send(s1,"2",1,0);
     if (rc<=0)
     perror("oshibka vyzova send");
     exit(0);
    
    }
    

    и вот клиент:

    #include <vcl.h>
    
    #include <winsock2.h>
    #include <stdio.h>
    #pragma hdrstop
    
    //---------------------------------------------------------------------------
    
    #pragma argsused
    int main(void)
    {struct sockaddr_in peer;
     int s;
     int rc;
     char buf[1];
     peer.sin_family=AF_INET;
     peer.sin_port=htons(7500);
     peer.sin_addr.s_addr=inet_addr("127.0.0.1");
     s=socket(AF_INET, SOCK_STREAM, 0);
     if (s<0)
      {
      perror("oshibka vyzova socket");
      exit(1);
      }
    
     rc=connect(s,(struct sockaddr *)&peer, sizeof(peer));
     if (rc)
      {
      perror("oshibka vyzova connect");
      exit(1);
      }
    
     rc=send(s,"1",1,0);
     if (rc<=0)
      {
      perror("oshibka vyzova send");
      exit(1);
      }
     rc=recv(s, buf, 1, 0);
     if (rc<=0)
      perror("oshibka vyzova recv");
     else
      printf("%c\n, buf[0]");
      exit(0);
    
    }
    

    Операционная система Win7 x64

    Заранее спасибо!

     

    • Перемещено Abolmasov Dmitry 18 ноября 2010 г. 21:14 (От:Настольные ПК)
    18 ноября 2010 г. 14:34

Ответы

  • Перед всем, что вы делаете с сокетами, вам необходимо инициализировать Winsock DLL:

     WSADATA wsaData;
    	WORD wVersionRequested = MAKEWORD(2, 2);
    	int err = WSAStartup(wVersionRequested, &wsaData);
      if (err != 0) {
    		printf("error wsa");
    	}
    


    Для связи [mail]
    • Помечено в качестве ответа Abolmasov Dmitry 22 ноября 2010 г. 7:58
    18 ноября 2010 г. 21:27