私はこのリンクを参照しているクライアントサーバープログラミングを使用しており、サーバーは正常に実行されています。
- サーバーに継続的にデータを送信する必要があります。
- 各パケットを送信する前に毎回 connect() したくありません。したがって、初めてソケットを作成して最初のパケットを送信し、残りのデータは write() 関数を使用してデータをソケットに書き込みました。
しかし、私の問題は、サーバーが存在しない場合、またはイーサネットが無効になっている場合でもデータを継続的に送信しているときに、ソケットにデータを正常に書き込むことです。
一度だけソケットを作成し、サーバー障害を承知の上で継続的にデータを送信する方法はありますか?
このようにする主な理由は、サーバー側で GPRS モデムを使用しており、パケットごとに connect() 関数を呼び出すたびにモデムがハングするためです。
以下のコードを使用してソケットを作成するには
Gprs_sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (Gprs_sockfd < 0)
{
Display("ERROR opening socket");
return 0;
}
server = gethostbyname((const char*)ip_address);
if (server == NULL)
{
Display("ERROR, no such host");
return 0;
}
bzero((char *) &serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
bcopy((char *)server->h_addr,(char *)&serv_addr.sin_addr.s_addr,server->h_length);
serv_addr.sin_port = htons(portno);
if (connect(Gprs_sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0)
{
Display("ERROR connecting");
return 0;
}
そして、以下のコードを使用してソケットに書き込むたびに
n = write(Gprs_sockfd,data,length);
if(n<0)
{
Display("ERROR writing to socket");
return 0;
}
前もって感謝します.............