Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void start_connection_server(){
- enum stts status;
- struct sockaddr_in addr;
- int addrlen, sock, cnt;
- struct ip_mreq mreq;
- char message[193];
- char server_name[20] = "Unul dintre servere";
- int port_tcp = htons(6001); //transforma portul din int pe 16 biti in cod specific de retea,unsigned short or an uint16_t equal to 2 bytes or 16 bits.
- message[193] = "";
- memcpy(message, server_name, 20);
- memcpy(&message[20], &port_tcp, sizeof(port_tcp));
- sock = socket(AF_INET, SOCK_DGRAM, 0);
- if (sock < 0) {
- perror("socket");
- exit(1);
- }
- bzero((char *) &addr, sizeof(addr));
- addr.sin_family = AF_INET;
- addr.sin_addr.s_addr = htonl(INADDR_ANY); //The htonl() function converts the unsigned integer hostlong from host byte order to network byte order.
- addr.sin_port = htons(EXAMPLE_PORT);
- addrlen = sizeof(addr);
- pthread_create(&start_tcp_server, NULL, &MyThread, NULL);
- if (argc <= 1) {
- /* receive */
- if (bind(sock, (struct sockaddr *) &addr, sizeof(addr)) < 0) {
- perror("bind");
- exit(1);
- }
- mreq.imr_multiaddr.s_addr = inet_addr(EXAMPLE_GROUP);
- mreq.imr_interface.s_addr = htonl(INADDR_ANY);
- if (setsockopt(sock, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq)) //
- < 0) {
- perror("setsockopt mreq");
- exit(1);
- }
- int l = 0;
- while (1) {
- cnt = recvfrom(sock, message, sizeof(message), 0,
- (struct sockaddr *) &addr, &addrlen);
- if (cnt < 0) {
- perror("recvfrom");
- exit(1);
- } else if (cnt == 0) {
- break;
- }
- memcpy(message, server_name, 20);
- memcpy(&message[20], &port_tcp, sizeof(port_tcp));
- // Start the server
- cnt = sendto(sock, message, sizeof(message), 0,
- (struct sockaddr *) &addr, addrlen);
- if (cnt < 0) {
- perror("sendto");
- exit(1);
- }
- printf("%s: message = \" %d \n", inet_ntoa(addr.sin_addr), message);
- l++;
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement