(echoサーバ)C言語を用いてLinux上でマルチスレッドのTCP受信データを実現し,同じデータを返すネットワークプログラミング

12414 ワード

目次
linuxのネットワークプログラミングでは、TCPプロトコルは私たちが最もよく使ういくつかのプロトコルの一つであり、今日はTCPプロトコルを使用してマルチスレッドの返信プログラム(echoサーバ)を実現します.
総じてC言語を用い,メインスレッドではsocketソケットが常に傍受された状態であり,TCPクライアントリンクがあれば新しいサブスレッドを開いて処理し,受信したデータを送信者に返す.ではコードを見てみましょう
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
void *TCP_client(void *arg);
int main(int argc, char const *argv[])
{
    //sockfd     (                        )
    int sockfd = socket(AF_INET,SOCK_STREAM,0);

    //     bind     port  
    struct sockaddr_in my_addr;
    bzero(&my_addr,sizeof(my_addr));
    my_addr.sin_family = AF_INET;
    my_addr.sin_port = htons(atoi(argv[1]));
    my_addr.sin_addr.s_addr = htonl(INADDR_ANY);
    int opt = 1;
	// sockfd           
	//                     
    setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (const void *)&opt, sizeof(opt));
    bind(sockfd,(struct sockaddr*)&my_addr,sizeof(my_addr));
    //  listen              
    listen(sockfd, 10);
    //  accept           
    while(1)
    {
        struct sockaddr_in client_addr;
        socklen_t len = sizeof(client_addr);
        //  
        int new_fd = accept(sockfd, (struct sockaddr *)&client_addr, &len);
        //new_fd                    
        //         
        char ip_str[16]="";
        inet_ntop(AF_INET, &client_addr.sin_addr.s_addr,ip_str,16);
        printf("ip:%s  port:%hu
"
, ip_str, ntohs(client_addr.sin_port)); // pthread_t tid; pthread_create(&tid,NULL,TCP_client, (void *)new_fd); pthread_detach(tid); } // close(sockfd); return 0; } void *TCP_client(void *arg) { int new_fd = (int)(long)arg; // (echo ) char buf[128]=""; // int ret = recv(new_fd, buf,sizeof(buf),0); // send(new_fd,buf,ret,0); // close(new_fd); }