0

ネットワーク初心者です。pc (window xp) をクライアントとして、mac をサーバーとして使用して、クライアント サーバー udp を作成する計画があります。server.cc、client.cc、net.h、および makefile の構成を作成しました。

ウィンドウでファイルを作成するには cygwin を使用し、Mac でファイルを作成するには g++ を使用します。

しかし、cygwin でファイルを作成すると、エラーが発生します。

g++ -c -o server.o server.cc

CC -o udp_server server.o -lsocket -lnsl

/usr/lib/gcc/i686-pc-cygwin/4.5.3/../../../../i686-pc-cygwin/bin/ld: -lsocket が見つかりません

/usr/lib/gcc/i686-pc-cygwin/4.5.3/../../../../i686-pc-cygwin/bin/ld: 見つかりません -lnsl collect2: ld は 1 つの終了ステータスを返しました

Macではエラーは次のとおりです。

c++ -c -o server.o server.cc

CC -o udp_server server.o -lsocket -lnsl

ld: -lsocket のライブラリが見つかりませんでした。

そして、ここにサーバーの私のコードプログラムがあります:

#include "net.h"
#include <iostream> //diilangin .h
using namespace std; //ditambah

const int  kWELL_KNOWN_PORT = 49998;
const char kMESSAGE[]  = "UDP Bye";

int main(){

// our to be server end-point, and client endpoint
   struct sockaddr_in serv_addr;
   struct sockaddr_in cli_addr;
   int cli_sock = 0, retval = 0; 

// need to first ask OS for free socket descriptor
// this will be the listening socket - notr SOCK_DGRAM option now
   cli_sock = socket(AF_INET, SOCK_DGRAM, 0);
   if(cli_sock<0)
  cerr<<"Error when trying to create socket"<<strerror(errno)<<endl;
   else {
  // build an internet socket address structure, defining port.
  memset(&serv_addr, 0, sizeof(serv_addr));
  serv_addr.sin_family      = AF_INET;
  serv_addr.sin_addr.s_addr = htonl(INADDR_ANY); // any of this machines IPs will do
  serv_addr.sin_port        = htons(kWELL_KNOWN_PORT);

  // attempt to bind socket - still need to in UDP
  retval = bind(cli_sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr));
  if(retval < 0)
     cerr<<"Could not bind to port"<<endl<<strerror(errno)<<endl;
  else {
     // forever loop no more accept or listen!!!
     for(;;) {
        char buff[256];

        // get the message and display it
        //int clilen = sizeof(cli_addr); di comment
        socklen_t clilen = (socklen_t)sizeof(cli_addr);
        int len = recvfrom(cli_sock, buff, 256, 0, (struct sockaddr*)&cli_addr, &clilen);
        buff[len] = 0;
        cout<<"GOT "<<buff<<endl;

        // send a reply
        strcpy(buff,kMESSAGE);
        if(sendto(cli_sock, buff, strlen(buff), 0, (struct sockaddr*)&cli_addr, clilen) == -1)
           cerr<<"Error when sending"<<endl<<strerror(errno)<<endl;
     }
      }
   }
   return 0;
} 

プログラムを改善するための提案はありますか?

ダニエル

4

1 に答える 1

0

cygwin には -lsocket (libsocket) はありません。追加してみてください:

#include <sys/socket.h>

...あなたのヘッダーに?sys/socket.h は Cygwin に標準で付属しています。

これがお役に立てば幸いです。

于 2013-03-27T12:49:12.657 に答える