ネットワーク初心者です。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;
}
プログラムを改善するための提案はありますか?
ダニエル