Tham khảo tài liệu 'các bài thực hành linux phần 4', công nghệ thông tin, hệ điều hành phục vụ nhu cầu học tập, nghiên cứu và làm việc hiệu quả | - 37- printf s sending data to s IP s n argv 0 h- h_name inet_ntoa struct in_addr h- h_addr_list 0 h- h_addrtype memcpy char h- h_addr_list 0 h- h_length htons REMOTE_SERVER_PORT socket creation sd socket AF_INET SOCK_DGRAM 0 if sd 0 printf s cannot open socket n argv 0 exit 1 bind any port AF_INET htonl INADDR_ANY htons 0 rc bind sd struct sockaddr cliAddr sizeof cliAddr if rc 0 printf s cannot bind port n argv 0 exit 1 send data for i 2 i argc i rc sendto sd argv i strlen argv i 1 0 struct sockaddr remoteServAddr sizeof remoteServAddr if rc 0 printf s cannot send data d n argv 0 i-1 close sd exit 1 return 1 Chương trình include sys include sys include netinet include arpa include include include close - 38- include memset define LOCAL_SERVER_PORT 1500 define MAX_MSG 100 int main int argc char argv int sd rc n cliLen struct sockaddr_in cliAddr servAddr char msg MAX_MSG Tạo socket trên máy Server - Đặt tên cho socket của chương trình Server sd socket AF_INET SOCK_DGRAM 0 if sd 0 printf s cannot open socket n argv 0 exit 1 bind local server port - ràng buộc tên với socket AF_INET htOnl INADDR_ANY htons LOCAL_SERVER_PORT rc bind sd struct sockaddr servAddr sizeOf servAddr if rc 0 printf s cannot bind port number d n argv 0 LOCAL_SERVER_PORT exit 1 printf s waiting for data on port UDP u n argv 0 LOCAL_SERVER_PORT Thực hiện vòng lặp vô hạn trên Server để chờ và xử lý kết nối đến từ máy client while 1 Khởi tạo bộ đệm memset msg 0x0 MAX_MSG Nhận dữ liệu gởi đến từ client cliLen sizeof cliAddr n recvfrom sd msg MAX_MSG 0 struct sockaddr cliAddr cliLen if n 0 printf s cannot receive data n argv 0 continue In dữ liệu nhận được printf s from s UDP u s n argv 0 inet_ntoa .