Advertisement
captainIBM

socket server

Dec 23rd, 2017
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.97 KB | None | 0 0
  1. #if defined (WIN32)
  2. #include <winsock2.h>
  3. typedef int socklen_t;
  4. #elif defined (linux)
  5. #include <sys/types.h>
  6. #include <sys/socket.h>
  7. #include <netinet/in.h>
  8. #include <arpa/inet.h>
  9. #include <unistd.h>
  10. #define INVALID_SOCKET -1
  11. #define SOCKET_ERROR -1
  12. #define closesocket(s) close(s)
  13. typedef int SOCKET;
  14. typedef struct sockaddr_in SOCKADDR_IN;
  15. typedef struct sockaddr SOCKADDR;
  16. #endif
  17.  
  18. #include <stdio.h>
  19. #include <stdlib.h>
  20. #define PORT 23
  21.  
  22.  
  23.  
  24. int main(void)
  25. {
  26. #if defined (WIN32)
  27. WSADATA WSAData;
  28. int erreur = WSAStartup(MAKEWORD(2,2), &WSAData);
  29. #else
  30. int erreur = 0;
  31. #endif
  32.  
  33. /* Socket et contexte d'adressage du serveur */
  34. SOCKADDR_IN sin;
  35. SOCKET sock;
  36. socklen_t recsize = sizeof(sin);
  37.  
  38. /* Socket et contexte d'adressage du client */
  39. SOCKADDR_IN csin;
  40. SOCKET csock;
  41. socklen_t crecsize = sizeof(csin);
  42.  
  43. int sock_err;
  44.  
  45.  
  46. if(!erreur)
  47. {
  48. /* Création d'une socket */
  49. sock = socket(AF_INET, SOCK_STREAM, 0);
  50.  
  51. /* Si la socket est valide */
  52. if(sock != INVALID_SOCKET)
  53. {
  54. printf("La socket %d est maintenant ouverte en mode TCP/IP\n", sock);
  55.  
  56. /* Configuration */
  57. sin.sin_addr.s_addr = htonl(INADDR_ANY); /* Adresse IP automatique */
  58. sin.sin_family = AF_INET; /* Protocole familial (IP) */
  59. sin.sin_port = htons(PORT); /* Listage du port */
  60. sock_err = bind(sock, (SOCKADDR*)&sin, recsize);
  61.  
  62. /* Si la socket fonctionne */
  63. if(sock_err != SOCKET_ERROR)
  64. {
  65. /* Démarrage du listage (mode server) */
  66. sock_err = listen(sock, 5);
  67. printf("Listage du port %d...\n", PORT);
  68.  
  69. /* Si la socket fonctionne */
  70. if(sock_err != SOCKET_ERROR)
  71. {
  72. /* Attente pendant laquelle le client se connecte */
  73. printf("Patientez pendant que le client se connecte sur le port %d...\n", PORT);
  74. csock = accept(sock, (SOCKADDR*)&csin, &crecsize);
  75. printf("Un client se connecte avec la socket %d de %s:%d\n", csock, inet_ntoa(csin.sin_addr), htons(csin.sin_port));
  76. system("PAUSE");
  77. }
  78. else
  79. perror("listen");
  80. }
  81. else
  82. perror("bind");
  83.  
  84. /* Fermeture de la socket client et de la socket serveur */
  85. printf("Fermeture de la socket client\n");
  86. closesocket(csock);
  87. printf("Fermeture de la socket serveur\n");
  88. closesocket(sock);
  89. printf("Fermeture du serveur terminée\n");
  90. }
  91. else
  92. perror("socket");
  93.  
  94. #if defined (WIN32)
  95. WSACleanup();
  96. #endif
  97. }
  98.  
  99. return EXIT_SUCCESS;
  100. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement