1. 程式人生 > >Linux C/C++網路程式設計基礎 TCP簡單實現

Linux C/C++網路程式設計基礎 TCP簡單實現

簡單的linux下socket程式設計,分別基於TCP協議實現的簡單程式

linux下socket程式設計可以概括為以下幾個函式的運用:

  • socket()
  • bind()
  • listen()
  • connect()
  • accept()
  • read()
  • write()
  • close()函式


server端

/*
*   socket簡單程式設計 服務端
 */

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

#define BUFFSIZE 1024

int main(int argc, char *argv[])
{
    int server_sockfd = 0;
    int client_sockfd = 0;
    int len = 0;
    int sin_size = 0;
    struct sockaddr_in server_addr;
    struct sockaddr_in client_addr;
    char buf[BUFFSIZE] = {0};

    bzero(&server_addr, sizeof(server_addr));
    server_addr.sin_family = AF_INET;
    server_addr.sin_addr.s_addr = INADDR_ANY;
    server_addr.sin_port = htons(8000);

    if((server_sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
    {
        perror("socket error!\n");
        return -1;
    }

    if(bind(server_sockfd, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)) < 0)
    {
        perror("bind error!\n");
        return -1;
    }

    if(listen(server_sockfd, 5) < 0)
    {
        perror("listen error!\n");
        return -1;
    }

    sin_size= sizeof(struct sockaddr_in);

    if((client_sockfd = accept(server_sockfd, (struct sockaddr *)&client_addr, &sin_size)) < 0)
    {
        perror("accept error!\n");
        return -1;
    }

    printf("accept client %s\n",inet_ntoa(client_addr.sin_addr));
    len = send(client_sockfd, "Hello word!\n",30,0);

    while((len = recv(client_sockfd, buf, BUFFSIZE, 0)) >0)
    {
        buf[len] = '\0';
        printf("buf = %s\n",buf);
        if(send(client_sockfd, buf, len, 0) < 0)
        {
            perror("send error!\n");
            return -1;
        }
    }

    close(client_sockfd);
    close(server_sockfd);

    return 0;
}

client端

/*
*   socket簡單程式設計 客戶端
 */

#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>

#define BUFFSIZE 1024

int main(int argc, char *argv[])
{
    int client_sockfd = 0;
    int len = 0;
    struct sockaddr_in server_addr;
    char buf[BUFFSIZE] = {0};
    bzero(&server_addr, sizeof(struct sockaddr_in));
    server_addr.sin_family = AF_INET;
    server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
    server_addr.sin_port = htons(8000);

    if((client_sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
    {
        perror("socket error!\n");
        return -1;
    }

    if(connect(client_sockfd, (struct sockaddr*)&server_addr, sizeof(struct sockaddr)) < 0)
    {
        perror("client error!\n");
        return -1;
    }

    printf("connect success!\n");

    len = recv(client_sockfd, buf, BUFFSIZE, 0);
    buf[len] = '\0';
    printf("client_buf = %s\n",buf);

    while(1)
    {
        printf("Enter string to send:");
        scanf("%s",buf);
        if(!strcmp(buf,"quit"))
        {
            break;
        }

        len = send(client_sockfd, buf, strlen(buf), 0);
        len = recv(client_sockfd, buf, BUFFSIZE, 0);
        buf[len] = '\0';
        printf("received: %s\n",buf);
    }

    close(client_sockfd);

    return 0;
}

相關推薦

Linux C/C++網路程式設計基礎 TCP簡單實現

簡單的linux下socket程式設計,分別基於TCP協議實現的簡單程式linux下socket程式設計可以概括為以下幾個函式的運用:socket()bind()listen()connect()accept()read()write()close()函式server端/*

Linux學習之網路程式設計TCP相關基礎知識)

言之者無罪,聞之者足以戒。 - “詩序”、 1、網路位元組序: 在TCP的編寫過程中需要從網路位元組序轉換到主機位元組序,當然也需要從主機位元組序轉換到網路位元組序 htons 把 unsigned short型別從主機序轉換到網路序htonl把unsigned long型別從

Linux學習之網路程式設計TCP程式設計 模型總結)

言之者無罪,聞之者足以戒。 - “詩序” TCP通訊也就是伺服器和客戶端的一種通訊方式,它的整體框架為: 針對TCP通訊所用到的函式,我來做一下說明: (1)插座創造一個套接字 int socket(int domain,int type,int protocol) 標頭檔

Linux學習之網路程式設計TCP三次握手四次揮手)

言之者無罪,聞之者足以戒。 - “詩序” 1、三次握手: 看一下三次握手的框圖: (1)、伺服器必須準備好接受外來連線 (2)、客戶端呼叫connect來主動開啟一個連線,此時客戶端TCP將會發送一個SYN分節 (3)、伺服器必須確認客戶的SYN (4)、客戶必須確認伺

Linux學習之網路程式設計TCP程式設計

言之者無罪,聞之者足以戒。 - “詩序” 1,TCP是什麼? TCP傳輸控制協議 向用戶程序提供可靠的全雙工位元組流(位元組流:給每一個位元組編序) 2,UDP是什麼? UDP使用者資料報協議 是一種無連線的協議 3,獲取時間服務的客戶端 (1),建立一個的的I

網路程式設計——3.TCP/UDP實現跨平臺檔案傳輸

一、實驗目的     在上次檔案傳輸的程式基礎上,利用循環面向連線、迴圈無連線方式完成linux和windows平臺的檔案傳輸,並完成客戶端、伺服器端程式碼的封裝。 二、實驗分析      1.使用TCP實現   在上次實驗基礎上,使用tcp_server.c的程式碼

Linux C高階程式設計——網路程式設計基礎(1)

Linux高階程式設計——BSD socket的網路程式設計 宗旨:技術的學習是有限的,分享的精神是無限的。 一網路通訊基礎         TCP/IP協議簇基礎:之所以稱TCP/IP是一個協議簇,是因為TCP/IP包含TCP 、IP、UDP、ICMP等多種協議。下圖

Linux C高階程式設計——網路程式設計TCP(3)

Linux網路程式設計(三)——TCP 宗旨:技術的學習是有限的,分享的精神是無限的。 1、TCP段格式         和UDP協議一樣也有源埠號和目的埠號,通訊的雙方由IP地址和埠號標識。32位序號、32位確認序號、視窗大小。4位首部長度和IP協議頭類似,表示TCP協議頭的長度,以4位元組為單位,

linuxC/C++網路程式設計基本:socket實現tcp和udp的例子

簡單的linux下socket程式設計,分別基於TCP和UDP協議實現的簡單程式 linux下socket程式設計可以概括為以下幾個函式的運用: socket() bind() listen

linux C 網路程式設計基礎

TCP/IP基礎 UDP提供無連線服務 UDP的資料格式: #ifdef __FAVOR_BSD struct udphdr { u_int16_t uh_sport; /* source port */

C#程式設計基礎簡單概述與理解)

1、C#變數和資料輸入 C#常用到的幾個資料型別: 整型:int  說明:32位有符號整數  範圍:-2³¹~2³¹-1 浮點型:double  說明:64位雙精度浮點數  範圍:±5.0×10-­﹣³²~±1.7×10³º 布林型:bool  值:true和false  字串型:0個或多個字元組成的

洞悉C++網路程式設計tcp/ip和socket api

原文地址:https://blog.csdn.net/libaineu2004/article/details/79020403 TCP(Transmission Control Protocol) 傳輸控制協議 三次握手 TCP是主機對主機層的傳輸控制協議,提供可靠的連線服務,採用三次

C#之非同步程式設計基礎--Task用法簡單總結

Task類 Task類可以有返回值,返回值可以有多個,對於返回值的操作,可以使用Task<TResult> 類。也可以沒有返回值,通常以非同步方式來呼叫。看下下面一個簡單的例子。 首先定義了一個Task物件,返回值為string。 有一個Start()方

C#網路程式設計基礎

文章目錄 前言 這段時間學了一下用C#網路程式設計 補了一下這方面的知識 其實我以前也系統學習過這方面的知識,但總是抓不住重點,看完就忘記了 層級關係 TCP 與UDP tcp是建立在連線之上的

linux網路程式設計之用socket實現簡單客戶端和服務端的通訊(基於TCP

一、介紹基於TCP協議通過socket實現網路程式設計常用API 1、讀者如果不是很熟悉,可以先看我之前寫的幾篇部落格,有socket,地址結構的理解,更加方便讀者理解 地址分別是: 2、socket(TCP)程式設計API簡介 1)、socket int s

python網路程式設計TCP/IP、Socket、C/S架構等

網路程式設計 套接字 Socket來源 通訊的基石,是支援TCP/IP協議的網路通訊的基本操作單元 屬性:三元組(ip地址, 協議,埠) 域 型別 協議 IP地址 IP地址是一個32位的二進位制數就是4個位元組 通過指定的埠和協議找到

C#網路程式設計之---TCP協議的同步通訊(二)

上一篇學習日記C#網路程式設計之--TCP協議(一)中以服務端接受客戶端的請求連線結尾 既然服務端已經與客戶端建立了連線,那麼溝通通道已經打通,載滿資料的小火車就可以彼此傳送和接收了。現在讓我們來看看資料的傳送與接收 先把服務端與客戶端的連線程式碼敲出來 服務端 IPAddress ip = new IP

C語言網路程式設計(三)建立套接字通訊TCP

為了實現伺服器與客戶機的通訊,伺服器和客戶機都必須建立套接字。伺服器與客戶機的工作原理可以用下面的過程來描述。 (1)伺服器先用socket函式來建立一個套接字,用這個套接字完成通訊的監聽。 (2)用bind函式來繫結一個埠號和IP地址。因為本地計算機可能有多個網絡卡和IP

linux網路程式設計TCP/IP基礎(二):利用ARP和ICMP協議解釋ping命令

一、MTU 乙太網和IEEE 802.3對資料幀的長度都有限制,其最大值分別是1500和1492位元組,將這個限制稱作最大傳輸單元(MTU,Maximum Transmission Unit)。如果I

基於LinuxC++之網路程式設計

套接字的基本概念 通訊型別: 控制套接字如何傳輸和處理資料,資料以包的形式傳輸 連線(connection)型別:確保所有包依序傳輸,如果丟包,則請求重傳 資料報(datagram)型別:不保證包的到達順序,包可能丟失 名空間: 指定套接字地址格