Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <netinet/in.h>
- #include <stdio.h>
- #include <string.h>
- #include <unistd.h>
- #include "err.h"
- #define BUFFER_SIZE 2000
- #define QUEUE_LENGTH 5
- #define MAX_MENU_STR 100
- #define MIN_PORT 1024
- #define MAX_PORT 65535
- char RESET_TERM[] = {0x1B,'c','\0'};
- // IAC DO LINEMODE IAC WILL ECHO
- char NEGOTIATION[] = "\377\375\042\377\373\001";
- char MAIN_MENU[] = "Opcja A\n\r"
- "Opcja B\n\r"
- "Koniec\n\r";
- char MENU_SECOND[] = "Opcja B1\n\r"
- "Opcja B2\n\r"
- "Wstecz\n\r";
- // void menu_str(char *str, int menu_type, ) {
- // //TODO
- // }
- char ARR_UP[] = {27, 91, 65};
- char ARR_DOWN[] = {27, 91, 66};
- int main(int argc, char *argv[])
- {
- int sock, msg_sock;
- struct sockaddr_in server_address;
- struct sockaddr_in client_address;
- socklen_t client_address_len;
- char buffer[BUFFER_SIZE];
- ssize_t len, snd_len;
- // checking the number of arguments
- if (argc != 2) {
- fprintf(stderr, "One argument required: port number\n");
- return 1;
- }
- // checking if given port number is in the correct range
- int port_num = argv[1];
- if (port_num <= MIN_PORT || port_num >= MAX_PORT) {
- fprintf(stderr, "Port number not in range <%d, %d>\n", MIN_PORT, MAX_PORT);
- return 1;
- }
- sock = socket(PF_INET, SOCK_STREAM, 0); // creating IPv4 TCP socket
- if (sock < 0)
- syserr("socket");
- // after socket() call; we should close(sock) on any execution path;
- // since all execution paths exit immediately, sock would be closed when program terminates
- server_address.sin_family = AF_INET; // IPv4
- server_address.sin_addr.s_addr = htonl(INADDR_ANY); // listening on all interfaces
- server_address.sin_port = htons(port_num); // listening on port port_num
- // bind the socket to a concrete address
- if (bind(sock, (struct sockaddr *) &server_address, sizeof(server_address)) < 0)
- syserr("bind");
- // switch to listening (passive open)
- if (listen(sock, QUEUE_LENGTH) < 0)
- syserr("listen");
- for (;;) {
- client_address_len = sizeof(client_address);
- // get client connection from the socket
- msg_sock = accept(sock, (struct sockaddr *) &client_address, &client_address_len);
- if (msg_sock < 0) {
- syserr("accept");
- } else {
- printf("Client has connected.\n");
- }
- // if(write(msg_sock, RESET_TERM, sizeof(RESET_TERM)) != sizeof(RESET_TERM)) {
- // syserr("partial / failed write");
- // }
- if(write(msg_sock, NEGOTIATION, 6) != 6) {
- syserr("failed negotiation");
- }
- do {
- if(write(msg_sock, RESET_TERM, sizeof(RESET_TERM)) != sizeof(RESET_TERM)) {
- syserr("partial / failed write");
- }
- if (write(msg_sock, MAIN_MENU, sizeof(MAIN_MENU)) != sizeof(MAIN_MENU)) {
- syserr("failed menu");
- }
- len = read(msg_sock, buffer, sizeof(buffer));
- if(len == 3) {
- if(strncmp(buffer, ARR_UP, 3) == 0) {
- printf("A\n");
- } else if(strncmp(buffer, ARR_DOWN, 3) == 0) {
- printf("B\n");
- } else {
- printf("C\n");
- }
- }
- if (len < 0)
- syserr("reading from client socket");
- else {
- // printf("read from socket: %zd bytes: %.*s\n", len, (int) len, buffer);
- // snd_len = write(msg_sock, buffer, len);
- // if (snd_len != len)
- // syserr("writing to client socket");
- }
- } while (len > 0);
- printf("Ending connection.\n");
- if (close(msg_sock) < 0)
- syserr("close");
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement