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