2010-02-09 7 views
-1

я пишу программу в C и я хочу знать, как я могу слушать на ком порту и считывать данные из него пожалуйста, помогите мне спасибоСлушайте на ком порт

+4

Использование COM-портов зависит от ОС, поэтому вам нужно сообщить нам, для какой ОС вы хотите это использовать. –

+2

OS-специфический * и * окружающая среда. Просто стандартные библиотеки C? Любая структура вообще? –

+0

Вы отметили в комментарии, что вы разрабатываете для встроенной системы, но не упомянули операционную систему, которую вы будете использовать. Linux? Окна? BSD? Может, что-то еще? –

ответ

1

Я не уверен, что вы ищет, но это может иметь некоторую помощь, его в Unix:

#include <stdio.h> 
#include <sys/types.h> 
#include <sys/socket.h> 
#include <netinet/in.h> 
#include <bstring.h>   /* bzero(), bcopy() */ 
#include <unistd.h>   /* read(), write(), close() */ 
#include <errno.h> 
#include <sys/signal.h> 

int obtain_socket(int port); 
void show_message(int sd); 
void close_down(int sigtype); 


#define PORT 2001   /* default port for server */ 
#define SIZE 512   /* max length of character string */ 

int ssockfd;  /* socket for PORT; global for close_down() */ 

int main() 
{ 
    int sd, client_len; 
    struct sockaddr_in client; 

    signal(SIGINT, close_down); /* use close_down() to terminate */ 

    printf("Listen starting on port %d\n", PORT); 
    ssockfd = obtain_socket(PORT); 
    while(1) { 
    client_len = sizeof(client); 
    if ((sd = accept(ssockfd, (struct sockaddr *) &client, 
         &client_len)) < 0) { 
     perror("accept connection failure"); 
     exit(4); 
    } 
    show_message(sd); 
    close(sd); 
    } 
    return 0; 
} 


int obtain_socket(int port) 
/* Perform the first four steps of creating a server: 
    create a socket, initialise the address data structure, 
    bind the address to the socket, and wait for connections. 
*/ 
{ 
    int sockfd; 
    struct sockaddr_in serv_addr; 

    /* open a TCP socket */ 
    if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { 
    perror("could not create a socket"); 
    exit(1); 
    } 

    /* initialise socket address */ 
    bzero((char *)&serv_addr, sizeof(serv_addr)); 
    serv_addr.sin_family = AF_INET; 
    serv_addr.sin_addr.s_addr = htonl(INADDR_ANY); 
    serv_addr.sin_port = htons(port); 

    /* bind socket to address */ 
    if (bind(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) { 
    perror("could not bind socket to address"); 
    exit(2); 
    } 

    /* set socket to listen for incoming connections */ 
    /* allow a queue of 5 */ 
    if (listen(sockfd, 5) == -1) { 
    perror("listen error"); 
    exit(3); 
    } 
    return sockfd; 
} 


void show_message(int sd) 
/* Print the incoming text to stdout */ 
{ 
    char buf[SIZE]; 
    int no; 

    while ((no = read(sd, buf, SIZE)) > 0) 
    write(1, buf, no); /* write to stdout */ 
} 


void close_down(int sigtype) 
/* Close socket connection to PORT when ctrl-C is typed */ 
{ 
    close(ssockfd); 
    printf("Listen terminated\n"); 
    exit(0); 
} 
+0

привет, я хочу запустить эту программу на внедренной системе – Mehdi

+0

Какой компилятор вы используете для системы? Во всех случаях просто попробуйте скомпилировать эту программу и посмотреть, что вы получаете. – Vivek

+0

Спасибо Vivek. Я сделал следующее для компиляции в Linux: измените на . Добавить "включить ". –

Смежные вопросы