最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c語言網(wǎng)絡編程-標準步驟(比較簡單)

 更新時間:2014年01月30日 22:17:27   作者:  
這篇文章主要介紹了c語言網(wǎng)絡編程-標準步驟(比較簡單),需要的朋友可以參考下

c語言網(wǎng)絡編程-標準步驟,真的很簡單啊

server.c

復制代碼 代碼如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <netdb.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>

#define PORT 4444
#define BACKLOG 5

int main(int argc, char *argv[]) {
    int sock_fd, new_fd;
    struct sockaddr_in server_addr, client_addr;
    int sin_size;
    int nbytes;
    int on = 1;
    char buffer[1024];

    if ((sock_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
        perror("socket");
        exit(1);
    }

    setsockopt(sock_fd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));

    memset(&server_addr, 0, sizeof(struct sockaddr_in));
    server_addr.sin_family      = AF_INET;
    server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
    server_addr.sin_port        = htons(PORT);

    if (bind(sock_fd, (struct sockaddr *)(&server_addr), sizeof(struct sockaddr)) == -1) {
        perror("bind");
        exit(1);
    }

    if (listen(sock_fd, BACKLOG) == -1) {
        perror("listen");
        exit(1);
    }

    printf("Server start... \n");

    while (1) {
        sin_size = sizeof(struct sockaddr_in);
        if ((new_fd = accept(sock_fd, (struct sockaddr *)(&client_addr), &sin_size)) == -1) {
            perror("accept");
            exit(1);
        }

        printf("Server get connection from %s\n", inet_ntoa(client_addr.sin_addr));
        if ((nbytes = read(new_fd, buffer, 1024)) == -1) {
            perror("read");
            exit(1);
        }
        buffer[nbytes] = '\0';
        printf("Server received: %s\n", buffer);
        close(new_fd);
    }

    return 0;
}

client.c

復制代碼 代碼如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

#define PORT 4444

int main(int argc, char *argv[]) {
    int sock_fd;
    struct sockaddr_in server_addr;
    struct hostent *host;
    char buffer[1024];

    if (argc < 2) {
        perror("Need hostname");
        exit(1);
    }

    if ((host = gethostbyname(argv[1])) == NULL) {
        perror("gethostbyname");
        exit(1);
    }

    if ((sock_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
        perror("socket");
        exit(1);
    }

    memset(&server_addr, 0, sizeof(struct sockaddr_in));
    server_addr.sin_family  = AF_INET;
    server_addr.sin_port    = htons(PORT);
    server_addr.sin_addr    = *((struct in_addr *)host->h_addr);

    if (connect(sock_fd, (struct sockaddr *)(&server_addr), sizeof(struct sockaddr)) == -1) {
        perror("connect");
        exit(1);
    }

    printf("Please input something:\n");
    fgets(buffer, 1024, stdin);
    write(sock_fd, buffer, strlen(buffer));
    close(sock_fd);

    return 0;
}

相關文章

  • C利用語言實現(xiàn)數(shù)據(jù)結構之隊列

    C利用語言實現(xiàn)數(shù)據(jù)結構之隊列

    隊列 (Queue):簡稱隊,是另一種限定性的線性表,它只允許在表的一端插入元素,而在另一端刪除元素。q=(a1, a2, a3, … an),其中a1為隊頭,an為隊尾,下面文章小編將為大家詳細介紹,需要的下伙伴可以參考一下
    2021-10-10
  • visual studio 2019編譯c++17的方法

    visual studio 2019編譯c++17的方法

    這篇文章主要介紹了visual studio 2019編譯c++17的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-03-03
  • C++ 整數(shù)拆分方法詳解

    C++ 整數(shù)拆分方法詳解

    整數(shù)拆分,指把一個整數(shù)分解成若干個整數(shù)的和。本文重點給大家介紹C++ 整數(shù)拆分方法詳解,非常不錯,感興趣的朋友一起學習吧
    2016-08-08
  • Qt正則表達式使用舉例

    Qt正則表達式使用舉例

    這篇文章主要給大家介紹了關于Qt正則表達式使用的相關資料,Qt中的正則表達式模式匹配功能由QRegExp類實現(xiàn),它完全支持Unicode,并可以應用于字符串驗證、搜索、查找替換和分割等場景,需要的朋友可以參考下
    2024-02-02
  • epoll封裝reactor原理剖析示例詳解

    epoll封裝reactor原理剖析示例詳解

    這篇文章主要為大家介紹了epoll封裝reactor原理剖析示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • C語言 基本語法示例講解

    C語言 基本語法示例講解

    本篇文章主要講解C語言 基本語法,這里提供簡單的示例和代碼來詳細講解C語言的基本語法,開始學習C語言的朋友可以看一下
    2016-08-08
  • C語言中的abs()函數(shù)和exp()函數(shù)的用法

    C語言中的abs()函數(shù)和exp()函數(shù)的用法

    這篇文章主要介紹了C語言中的abs()函數(shù)和exp()函數(shù)的用法,是C語言入門學習中的基礎知識,需要的朋友可以參考下
    2015-08-08
  • 一文帶你探索C++中類型轉換的奧秘

    一文帶你探索C++中類型轉換的奧秘

    C++?提供了四種類型轉換方式,幫助我們在不同數(shù)據(jù)類型之間進行有效的數(shù)據(jù)傳遞和操作,這些類型轉換方式在不同的場景下有各自的優(yōu)勢和適用性,下面我們就來深入了解一下吧
    2023-10-10
  • C語言進階教程之字符串&內(nèi)存函數(shù)

    C語言進階教程之字符串&內(nèi)存函數(shù)

    對于字符,在計算機內(nèi)部都是用數(shù)字(字符編碼)來表示的,而字符串是“字符連續(xù)排列”的一種表現(xiàn),這篇文章主要給大家介紹了關于C語言進階教程之字符串&內(nèi)存函數(shù)的相關資料,需要的朋友可以參考下
    2021-09-09
  • Qt使用QCustomPlot的實現(xiàn)示例

    Qt使用QCustomPlot的實現(xiàn)示例

    QCustomPlot是一個基于Qt C++的圖形庫,用于繪制和數(shù)據(jù)可視化,并為實時可視化應用程序提供高性能服務,本文主要介紹了Qt使用QCustomPlot的實現(xiàn)示例,感興趣的可以了解一下
    2024-01-01

最新評論

宜兴市| 洱源县| 南昌市| 都兰县| 岳普湖县| 从江县| 迁西县| 平果县| 西安市| 通城县| 牙克石市| 托克托县| 田阳县| 盖州市| 大同市| 仙桃市| 都江堰市| 武邑县| 丽水市| 寻乌县| 舞钢市| 宁晋县| 于都县| 滨海县| 呈贡县| 酉阳| 赤峰市| 建瓯市| 桐城市| 巴中市| 城口县| 蒙山县| 天峻县| 沙洋县| 梓潼县| 巴林右旗| 肃南| 盘锦市| 环江| 金乡县| 屏东县|