1. #include "hl.h"
    2. int main (void)
    3. {
    4. int fd = -1;
    5. struct sockaddr_in sin;
    6. /* 1. 创建socket fd */
    7. if ((fd = socket (AF_INET, SOCK_STREAM, 0)) < 0) {
    8. perror ("socket");
    9. exit (1);
    10. }
    11. /*2.连接服务器 */
    12. /*2.1 填充struct sockaddr_in结构体变量 */
    13. bzero (&sin, sizeof (sin));
    14. sin.sin_family = AF_INET;
    15. sin.sin_port = htons (SERV_PORT); //网络字节序的端口号
    16. #if 0
    17. sin.sin_addr.s_addr = inet_addr (SERV_IP_ADDR);
    18. #else
    19. if (inet_pton (AF_INET, SERV_IP_ADDR, (void *) &sin.sin_addr) != 1) {
    20. perror ("inet_pton");
    21. exit (1);
    22. }
    23. #endif
    24. if (connect (fd, (struct sockaddr *) &sin, sizeof (sin)) < 0) {
    25. perror ("connect");
    26. exit (1);
    27. }
    28. printf ("Client staring...OK!\n");
    29. /*3. 读写数据 */
    30. char buf[BUFSIZ];
    31. int ret = -1;
    32. while (1) {
    33. bzero (buf, BUFSIZ);
    34. if (fgets (buf, BUFSIZ - 1, stdin) == NULL) {
    35. continue;
    36. }
    37. do {
    38. ret = write (fd, buf, strlen (buf));
    39. } while (ret < 0 && EINTR == errno);
    40. if (!strncasecmp (buf, QUIT_STR, strlen (QUIT_STR))) { //用户输入了quit字符
    41. printf ("Client is exiting!\n");
    42. break;
    43. }
    44. }
    45. /*4.关闭套接字 */
    46. close (fd);
    47. }