• socket实现进程间通信


    show me your code:

    服务器端:

    1. #include
    2. #include
    3. #include
    4. #include
    5. #include
    6. #include
    7. #define SERV_TCP_PORT 8000 /* server's port number */
    8. #define MAX_SIZE 80
    9. int main(int argc, char *argv[])
    10. {
    11. int sockfd, newsockfd, clilen;
    12. struct sockaddr_in cli_addr, serv_addr;
    13. int port;
    14. char string[MAX_SIZE];
    15. int len;
    16. /* command line: server [port_number] */
    17. if(argc == 2)
    18. sscanf(argv[1], "%d", &port); /* read the port number if provided */
    19. else
    20. port = SERV_TCP_PORT;
    21. /* open a TCP socket (an Internet stream socket) */
    22. if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
    23. perror("can't open stream socket");
    24. exit(1);
    25. }
    26. /* bind the local address, so that the cliend can send to server */
    27. bzero((char *) &serv_addr, sizeof(serv_addr));
    28. serv_addr.sin_family = AF_INET;
    29. serv_addr.sin_addr.s_addr = htonl(INADDR_ANY); /* 或者使用INADDR_LOOPBACK都可以 */
    30. serv_addr.sin_port = htons(port);
    31. if(bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) {
    32. perror("can't bind local address");
    33. exit(1);
    34. }
    35. /* listen to the socket */
    36. listen(sockfd, 5);
    37. for(;;) {
    38. /* wait for a connection from a client; this is an iterative server */
    39. clilen = sizeof(cli_addr);
    40. newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen);
    41. if(newsockfd < 0) {
    42. perror("can't bind local address");
    43. }
    44. /* read a message from the client */
    45. len = read(newsockfd, string, MAX_SIZE);
    46. /* make sure it's a proper string */
    47. string[len] = 0;
    48. printf("%s\n", string);
    49. close(newsockfd);
    50. }
    51. }

    客户端:

    1. #include
    2. #include
    3. #include
    4. #include
    5. #include
    6. #include
    7. #include
    8. #include
    9. #define SERV_TCP_PORT 8000 /* server's port */
    10. int main(int argc, char *argv[])
    11. {
    12. int sockfd;
    13. struct sockaddr_in serv_addr;
    14. char *serv_host = "localhost";
    15. struct hostent *host_ptr;
    16. int port;
    17. int buff_size = 0;
    18. /* command line: client [host [port]]*/
    19. if(argc >= 2)
    20. serv_host = argv[1]; /* read the host if provided */
    21. if(argc == 3)
    22. sscanf(argv[2], "%d", &port); /* read the port if provided */
    23. else
    24. port = SERV_TCP_PORT;
    25. /* get the address of the host */
    26. if((host_ptr = gethostbyname(serv_host)) == NULL) {
    27. perror("gethostbyname error");
    28. exit(1);
    29. }
    30. if(host_ptr->h_addrtype != AF_INET) {
    31. perror("unknown address type");
    32. exit(1);
    33. }
    34. bzero((char *) &serv_addr, sizeof(serv_addr));
    35. serv_addr.sin_family = AF_INET;
    36. serv_addr.sin_addr.s_addr =
    37. ((struct in_addr *)host_ptr->h_addr_list[0])->s_addr;
    38. serv_addr.sin_port = htons(port);
    39. /* open a TCP socket */
    40. if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
    41. perror("can't open stream socket");
    42. exit(1);
    43. }
    44. /* connect to the server */
    45. if(connect(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) {
    46. perror("can't connect to server");
    47. exit(1);
    48. }
    49. /* write a message to the server */
    50. write(sockfd, "hello world", sizeof("hello world"));
    51. close(sockfd);
    52. }

    Makefile

    1. all: server client
    2. server: server.o
    3. gcc -o server server.o
    4. server.o: server.c
    5. gcc -c server.c
    6. client: client.o
    7. gcc -o client client.o -lnsl
    8. client.o: client.c
    9. gcc -c client.c

  • 相关阅读:
    web前端电影项目作业源码 大学生影视主题网页制作电影网页设计模板 学生静态网页作业成品 dreamweaver电影HTML网站制作
    LruCache的使用
    KMeans算法全面解析与应用案例
    这波水文章
    JVM垃圾回收——CMS垃圾收集器
    item_get-商品详情
    code force 1728D - Letter Picking
    陪诊小程序:温暖您的就医之路,让关怀触手可及
    Java-基于SSM+JSP的医院挂号管理系统
    数据结构_栈和队列
  • 原文地址:https://blog.csdn.net/denglin12315/article/details/126186450