c語言實現socket登錄的簡單介紹

本文目錄一覽:

c語言系統庫之socket

ai參數應指向由getaddrinfo返回的第一個addrinfo結構。這個連表中的所有結構以及它們指向的任何動態存儲空間都被釋放掉。

在windows下,如何用純C語言實現socket網路編程?

mfc只是對socket進行了一些封裝,大部分人做

網路編程

都是用的原始的socket,比如如下介面都可以在c下進行調用

1.socket()

2.bind()

3.connect()

4.listen()

5.accept()

6.send()

和recv()

7.sendto()

和recvfrom()

8.close()

和shutdown()

9.

getpeername

()

10.

gethostname

()

這些介面是在Winsock2.h中定義的不是在mfc中定義的,你只需要包含Winsock2.h

頭文件

Ws2

_32.lib庫就可以了。

socket編程 c語言

sender 沒有看到 i 列印,是由於你沒有加換行,由於標準輸出是行緩衝,所以不會馬上列印,而是要等遇到 \n 或者進程結束才會列印。你可以寫成 printf(“%d\n”); 就能看到發送方的列印。

接收方也可以加上printf來列印。

這麼簡單的程序,用gdb自己調試也可以。

socket,linux用c語言實現

哦字元串回顯啊unix網路編程有好幾個版本,你可以去網上下它的源代碼(百度搜UNIX網路編程 源代碼),呃大部分被我的改的不成樣了,發個能用的給看看吧

//server

#includestdio.h

#includesys/socket.h

#includearpa/inet.h

#includenetinet/in.h

#includestdlib.h

#includestring.h

#includeunistd.h

#includeerrno.h

#includesignal.h

#define SERVPORT 1956

#define MAXLINE 100

typedef void Sigfunc(int);

void sig_chld(int signo)

{

        pid_t pid;

        int stat;

        while( (pid = waitpid(-1, stat, WNOHANG))  0)

                printf(“child %d terminated\n”, pid);

        return;

}

//read data from client, and write back to them

void str_echo(int sockfd)

{

        ssize_t n;

        char buf[MAXLINE];

        again:

        while( (n = read(sockfd, buf, MAXLINE))  0 )

                write(sockfd, buf, n);

        if(n  0  errno ==EINTR)

                goto again;

        else if(n  0 )

                printf(“error\n”);

}

int main(int argc, char** argv)

{

        int listenfd, connfd;

        socklen_t clilen;

        pid_t childpid;

        struct sockaddr_in servaddr, cliaddr;

        if( (listenfd = socket(AF_INET, SOCK_STREAM, 0))  0 )

        {

                printf(“socket fd error\n”);

                return -1;

        }

        bzero(servaddr, sizeof(servaddr));

        servaddr.sin_family = AF_INET;

        servaddr.sin_addr.s_addr = htonl(INADDR_ANY);

        servaddr.sin_port = htons(SERVPORT);

        if( bind(listenfd, (struct sockaddr *)servaddr, sizeof(servaddr)) 0 )

        {

                printf(“bind error\n”);

                return -1;

        }

        int backlong = 0;

        if(listen(listenfd, backlong) 0 )

        {

                printf(“listen error\n”);

                return -1;

        }

        signal(SIGCHLD, sig_chld);

        for(;;)

        {

                clilen = sizeof(cliaddr);

                if( (connfd = accept(listenfd, (struct sockaddr *)cliaddr, clilen))  0)

                {

                        if(errno == EINTR)      continue;

                        else printf(“accept error\n”);

                        return 0;

                }

                printf(“accept \n”);

                if( (childpid = fork()) == 0 )

                {

                        close(listenfd);    //close child’s listen socket

                        str_echo(connfd);

                        exit(0);

                }

                close(connfd);

        }

 }

//client

#includestdio.h

#includesys/socket.h

#include arpa/inet.h

#include netinet/in.h

#include stdlib.h

#include string.h

#define MAXLINE 10

int main(int argc, char ** argv)

{

        int sockfd, n;

        char recvline[MAXLINE+1];

        struct sockaddr_in servaddr,binaddr;

        if(argc != 2)

        {

                printf(“usage: IPADDRESS\n”);

                return -1;

        }

        if( (sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP))  0)

        {

                printf(“socket error\n”);

                return -1;

        }

        bzero(servaddr, sizeof(servaddr));

        servaddr.sin_family = AF_INET;

        servaddr.sin_port = htons(15);

        if(inet_pton(AF_INET, argv[1], servaddr.sin_addr)=0 )    

        {

                printf(“inet_pton error for s \n”, argv[1]);

                return -1;

        }

        int bindSock;

        binaddr.sin_family = AF_INET;

        inet_pton(AF_INET, “222.26.224.56”, binaddr.sin_addr);

        binaddr.sin_port = htons(20000);

        int reuse0 = 1;

        if(setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (char *)reuse0, sizeof(reuse0)) == -1)

        {

                printf(“set socket error\n”);

                return -1;

        }

        if( bind(sockfd, (struct sockaddr *)binaddr, sizeof(servaddr)) 0 )

        {

                printf(“bind error\n”);

                return -1;

        }

        if( connect(sockfd, (struct sockaddr*) servaddr, sizeof(servaddr) )  0 )

        {

                printf(“connection refuse\n”);

                return -1;

        }

        while( (n = read(sockfd, recvline, MAXLINE))  0 )

        {

                recvline[n] = 0;

                if(fputs(recvline, stdout) == EOF)

                {

                        printf(“fputs error”);

                        return -1;

                }

                printf(“\n”);

        }

        if(n  0 )

        {

                printf(“read error”);

                return -1;

        }

}

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/304157.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2025-01-01 11:04
下一篇 2025-01-01 11:04

相關推薦

  • AES加密解密演算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密演算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES演算法,並對實現過程進…

    編程 2025-04-29
  • Python簡單數學計算

    本文將從多個方面介紹Python的簡單數學計算,包括基礎運算符、函數、庫以及實際應用場景。 一、基礎運算符 Python提供了基礎的算術運算符,包括加(+)、減(-)、乘(*)、除…

    編程 2025-04-29
  • Python滿天星代碼:讓編程變得更加簡單

    本文將從多個方面詳細闡述Python滿天星代碼,為大家介紹它的優點以及如何在編程中使用。無論是剛剛接觸編程還是資深程序員,都能從中獲得一定的收穫。 一、簡介 Python滿天星代碼…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演著非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • Python海龜代碼簡單畫圖

    本文將介紹如何使用Python的海龜庫進行簡單畫圖,並提供相關示例代碼。 一、基礎用法 使用Python的海龜庫,我們可以控制一個小海龜在窗口中移動,並利用它的「畫筆」在窗口中繪製…

    編程 2025-04-29
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29
  • Python按位運算符和C語言

    本文將從多個方面詳細闡述Python按位運算符和C語言的相關內容,並給出相應的代碼示例。 一、概述 Python是一種動態的、面向對象的編程語言,其按位運算符是用於按位操作的運算符…

    編程 2025-04-29
  • Python語言由荷蘭人為中心的全能編程開發工程師

    Python語言是一種高級語言,很多編程開發工程師都喜歡使用Python語言進行開發。Python語言的創始人是荷蘭人Guido van Rossum,他在1989年聖誕節期間開始…

    編程 2025-04-28
  • Python語言設計基礎第2版PDF

    Python語言設計基礎第2版PDF是一本介紹Python編程語言的經典教材。本篇文章將從多個方面對該教材進行詳細的闡述和介紹。 一、基礎知識 本教材中介紹了Python編程語言的…

    編程 2025-04-28

發表回復

登錄後才能評論