為網路上的使用者提供時間服務,即為網路使用者返回伺服器的當前時間;
記錄發出請求的網路使用者的ip位址(儲存到檔案中);
編寫時間服務客戶端timeclient,該客戶端能夠向伺服器傳送時間服務請求,並把獲得的時間返回給使用者。
開發環境:fedora13,vim,gcc
timeserver.c檔案。
timeclient.c檔案#include#include#include#include#include#include#include#include#include#include#define port 1234
#define backlog 5
int main()
int opt = so_reuseaddr;
setsockopt(listenfd, sol_socket, so_reuseaddr, &opt, sizeof(opt));
bzero(&server, sizeof(server));
server.sin_family = af_inet;
server.sin_port = htons(port);
server.sin_addr.s_addr = htonl(inaddr_any);
if(bind(listenfd, (struct sockaddr *)&server, sizeof(server)) == -1)
if(listen(listenfd, backlog) == -1)
addrlen = sizeof(client);
if((connectfd = accept(listenfd, (struct sockaddr *)&client, &addrlen )) == -1)
printf("timeclient's ip is %s. ",inet_ntoa(client.sin_addr));
printf("time is %s\n",ctime(&t));
send(connectfd,(time_t *)&t,sizeof(time_t),0);
fprintf(fd,"%s %s\n",inet_ntoa(client.sin_addr),ctime(&t));
fclose(fd);
return 1;
}
執行結果:#include#include#include#include#include#include#include#include#define port 1234 /*listen port*/
int main ( int argc, char *argv)
/*get ip address*/
if((he = gethostbyname(argv[1])) == null)
if((sockfd = socket(af_inet, sock_stream, 0)) == -1)
bzero(&server, sizeof(server));
server.sin_family = af_inet;
server.sin_port = htons(port);
server.sin_addr = *((struct in_addr *)he->h_addr);
if(connect(sockfd, (struct sockaddr *)&server, sizeof(server)) == -1)
recv(sockfd,(void *)&t,sizeof(time_t),0);
printf("time is %s\n",ctime(&t));
}
Linux下socket程式設計之UDP
如下 udp client.c include include include include include include include static void usage char proc int main int argc,char argv int sock socket af ine...
linux網路程式設計之Socket
一.socket socket可看作是使用者程序與核心網路協議的程式設計介面.socket可用於本機程序間的通訊,也可用於網路上不同主機間的程序通訊.下圖顯示的是各種網路協議的位址格式 1.struct socketaddr 通用位址結構 通過獲取某種socketaddr結構體的首位址,不需要知道具...
Linux下socket程式設計之多程序TCP伺服器端
如下 tcp server.c include include include include include include include static void usage char proc ssize t startup char ip,char port struct sockaddr ...