fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <WinSock2.h>
  5.  
  6. void sendf(SOCKET *, char *);
  7. void sendrn(SOCKET *);
  8. void error(char *);
  9.  
  10. int main() {
  11. int code;
  12.  
  13. WSADATA wsadata;
  14. puts("WSAStartup()");
  15. code = WSAStartup(MAKEWORD(1, 1), &wsadata);
  16. if (code != 0) error("WSAStartup()");
  17.  
  18. puts("socket()");
  19. SOCKET sServer = socket(AF_INET, SOCK_STREAM, 0);
  20. if (sServer == INVALID_SOCKET) error("socket()");
  21.  
  22. SOCKADDR_IN aServer;
  23. memset(&aServer, 0, sizeof(aServer));
  24. aServer.sin_family = PF_INET;
  25. aServer.sin_addr.s_addr = htonl(INADDR_ANY);
  26. aServer.sin_port = htons(4321);
  27.  
  28. puts("bind()");
  29. code = bind(sServer, (SOCKADDR *)&aServer, sizeof(aServer));
  30. if (code == SOCKET_ERROR) error("bind()");
  31.  
  32. puts("listen()");
  33. code = listen(sServer, 5);
  34. if (code == SOCKET_ERROR) error("bind()");
  35.  
  36. SOCKADDR_IN aClient;
  37. int aClientSize = sizeof(aClient);
  38. puts("accept()");
  39. SOCKET sClient = accept(sServer, (SOCKADDR *)&aClient, &aClientSize);
  40. if (sClient == INVALID_SOCKET) error("accpet()");
  41.  
  42. printf("Client connected: %s\n", inet_ntoa(aClient.sin_addr));
  43.  
  44. char c;
  45. boolean header = false;
  46. while (recv(sClient, &c, 1, 0) > 0) {
  47. printf("%c", c);
  48. if (c == '\r') {
  49. if (recv(sClient, &c, 1, 0) < 0) break;
  50. printf("%c", c);
  51. if (c == '\n') {
  52. if (header) {
  53. header = false;
  54. break;
  55. }
  56. else header = true;
  57. }
  58. else header = false;
  59. }
  60. else header = false;
  61. }
  62.  
  63. char buffer[8];
  64. for (int i=0; i<sizeof(buffer); i++) printf("%02d ", i);
  65. printf("\tText\n");
  66. for (int i=0; i<sizeof(buffer)*3-1; i++) printf("=");
  67. printf(" \t========\n");
  68.  
  69. int r;
  70. while ((r=recv(sClient, buffer, sizeof(buffer), 0)) > 0) {
  71. if (r < 0) break;
  72. for (int i=0; i<r; i++) {
  73. printf("%02x ", buffer[i]);
  74. }
  75. if (r < sizeof(buffer)) {
  76. for (int i=0; i<(sizeof(buffer)-r); i++) printf(" ");
  77. }
  78. printf("\t");
  79. for (int i=0; i<r; i++) {
  80. switch (buffer[i]) {
  81. case 0: case 10: case 13:
  82. buffer[i] = '.';
  83. break;
  84. }
  85. printf("%c", buffer[i]);
  86. }
  87. printf("\n");
  88. if (r < sizeof(buffer)) break;
  89. }
  90. printf("\n");
  91.  
  92. puts("Send response to Client.");
  93. sendf(&sClient, "HTTP/1.1 200 OK");
  94. sendf(&sClient, "Content-Type: text/html; Charset: UTF-8");
  95. sendrn(&sClient);
  96. sendf(&sClient, "<!DOCTYPE html>");
  97. sendf(&sClient, "<html>");
  98. sendf(&sClient, "<head>");
  99. sendf(&sClient, "<style>");
  100. sendf(&sClient, "body {");
  101. sendf(&sClient, "margin: 0px;");
  102. sendf(&sClient, "padding: 0px;");
  103. sendf(&sClient, "font-family: Dotum;");
  104. sendf(&sClient, "font-size: 12px;");
  105. sendf(&sClient, "}");
  106. sendf(&sClient, "#test_div {");
  107. sendf(&sClient, "margin: 10px;");
  108. sendf(&sClient, "width: 100px;");
  109. sendf(&sClient, "height: 100px;");
  110. sendf(&sClient, "background: #700;");
  111. sendf(&sClient, "border: 3px solid #000;");
  112. sendf(&sClient, "border-radius: 3px;");
  113. sendf(&sClient, "}");
  114. sendf(&sClient, "</style>");
  115. sendf(&sClient, "<title>title</title>");
  116. sendf(&sClient, "</head>");
  117. sendf(&sClient, "<body>");
  118. sendf(&sClient, "Hello");
  119. sendf(&sClient, "<div id='test_div'></div>");
  120. sendf(&sClient, "</body>");
  121. sendf(&sClient, "</html>");
  122.  
  123. closesocket(sClient);
  124.  
  125. closesocket(sServer);
  126.  
  127. WSACleanup();
  128.  
  129. exit(0);
  130. }
  131.  
  132. void sendf(SOCKET *socket, char *s) {
  133. send(*socket, s, strlen(s), 0);
  134. sendrn(socket);
  135. }
  136. void sendrn(SOCKET *socket) {
  137. send(*socket, "\r\n", 2, 0);
  138. }
  139. void error(char *s) {
  140. fprintf(stderr, "Error: \n", s);
  141. }
Not running #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
Standard output is empty