1. 程式人生 > >3天精通linux網路程式設計 一

3天精通linux網路程式設計 一

基本tcp套接字程式設計。

客戶端程式:client.c

  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include <strings.h>
  4. #include <sys/types.h>
  5. #include <sys/socket.h>
  6. #include <netinet/in.h>
  7. #include <arpa/inet.h>
  8. #include <netdb.h>
  9. #include <stdlib.h>
  10. #define PORT 1234
  11. #define MAXDATASIZE 100
  12. int main(int argc, char **argv)
  13. {
  14. int sockfd, num;
  15. char buf[MAXDATASIZE];
  16. struct hostent *he;
  17. struct sockaddr_in server;
  18. if(argc != 2)
  19.     {   
  20.         printf("Uage: %s <IP ADDRESS>/n", argv[0]);
  21.         exit(1);
  22.     }
  23. if((he = gethostbyname(argv[1])) == NULL)
  24.     {
  25.         printf(
    "gethostbyname() error!");
  26.         exit(1);
  27.     }
  28. if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
  29.     {
  30.         printf("socket() error.");
  31.         exit(1);
  32.     }
  33.     bzero(&server, sizeof(server));
  34.     server.sin_family = AF_INET;
  35.     server.sin_port = htons(PORT);
  36.     server.sin_addr = *((
    struct in_addr *)he -> h_addr);
  37. if(connect(sockfd, (struct sockaddr *)&server, sizeof(server)) == -1)
  38.     {
  39.         printf("connect() error/n");
  40.         exit(1);
  41.     }
  42. if((num = recv(sockfd, buf, MAXDATASIZE, 0)) == -1)
  43.     {
  44.         printf("revc() error!/n");
  45.         exit(1);
  46.     }
  47.     buf[num - 1] = '/0';
  48.     printf("server message: %s/n", buf);
  49.     close(sockfd);
  50. }

伺服器端程式:server.c

  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include <string.h>
  4. #include <sys/socket.h>
  5. #include <sys/types.h>
  6. #include <netinet/in.h>
  7. #include <arpa/inet.h>
  8. #include <stdlib.h>
  9. #define PORT 1234
  10. #define BACKLOG 1
  11. int main(int argc, char **argv)
  12. {
  13. int listenfd, connectfd;
  14. struct sockaddr_in server;
  15. struct sockaddr_in client;
  16.     socklen_t addrlen;
  17. if((listenfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
  18.     {
  19.         perror("socket error()!");
  20.         exit(1);
  21.     }
  22. int opt = SO_REUSEADDR;
  23.     setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));
  24.     bzero(&server, sizeof(server));
  25.     server.sin_family = AF_INET;
  26.     server.sin_port = htons(PORT);
  27.         server.sin_addr.s_addr = htonl(INADDR_ANY);
  28. if(bind(listenfd, (struct sockaddr *)&server, sizeof(server)) == -1)
  29.     {
  30.         perror("Bind() error!");
  31.         exit(1);
  32.     }
  33. if(listen(listenfd, BACKLOG) == -1)
  34.     {
  35.         perror("listen() error!");
  36.         exit(1);
  37.     }
  38.     addrlen = sizeof(client);
  39. if((connectfd = accept(listenfd, (struct sockaddr *)&client, &addrlen)) == -1)
  40.     {
  41.         perror("accept() error./n");
  42.         exit(1);
  43.     }
  44.     printf("You got a connection from client's ip is %s, port is %d/n", inet_ntoa(client.sin_addr), htons(client.sin_port));
  45.     send(connectfd, "WELCOME!/n", 10, 0);
  46.     close(connectfd);
  47.     close(listenfd);
  48. }

相關推薦

3精通linux網路程式設計

基本tcp套接字程式設計。 客戶端程式:client.c #include <stdio.h> #include <unistd.h> #include <strings.h> #include <sys/types.h>

Linux 網路程式設計 全解()--------網路基礎協議

寫在前面:說一下寫這個系列的目的,隨著對網路開發的深入,越來越覺得自己網路基礎知識的薄弱,雖然開發過程中不需要對網路基礎有很深入的瞭解照樣能進行,但有一些問題仍然是不知其因,所以這個系列打算從最基本的網路知識展開記錄,也是一邊學習一邊整理筆記。歡迎大家共同學習,QQ:9936

linux網路程式設計學習筆記(

目錄 1. 獲取系統呼叫錯誤資訊:errno   strerror()     perror(); 他跟c語言中的fopen()有什麼區別呢?  他也呼叫的是這個open(); 2.常規檔案操作之建立、讀、寫

Linux網路程式設計):一個簡單的socket程式

伺服器: /* *tcp_server.c */ #include <stdio.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include

linux網路程式設計基礎API()

一下內容記錄linux網路程式設計基礎內容: 1、套接字地址結構 ipv4套接字地址結構:struct sockaddr_in,定義在<netinet/in.h>, ipv6套接字地址結構:struct sockaddr_in6,同樣定義在<netinet

Linux網路程式設計)基礎

 一、資料儲存順序:大端和小端         大端模式: 地址的增長順序與值的增長順序相反         小段模式: 地址的增長順序與值的增長順序相同         為什麼會有大小端模式之分呢?這是因為在計算機系統中,我們是以位元組為單位的,每個地址單元都對應著

linux網路程式設計基礎(

 一、資料儲存順序:大端和小端          高位位元組儲存高位元組稱為小端模式,通常都計算機採用這個模式儲存。而網路則採用大端傳輸。所以需要轉換       面試有時會出這麼個題:寫一個程式判

Linux網路程式設計) 基礎API介紹

一、socket 地址API 在介紹地址API前先弄清什麼是大端位元組序、小端位元組序,主機位元組序、網路位元組序。 大端位元組序:指一個整數的高位位元組儲存在記憶體的低地址處,低位位元組儲存在記憶體的高地址處。 小端位元組序:指整數的高位位元組儲存在記憶體的高

伺服器開發之linux網路程式設計---學習章節(

前言:    近期學習了伺服器相關的開發,平常主要擼c的程式,所以就下定決心研究了c的伺服器開發,目的也在與鞏固c的基本知識。詳細分享如下,若有錯誤請指正,希望與大家探討,共同學習進步。                                             

Linux網路程式設計網路協議概述(

目錄 1. 分層模型 2. 物理層 3. 鏈路層 4. 網路層 5. 傳輸層 6. 應用層 1. 分層模型 越接近下面的層,越靠近硬體,越上面的層,越接近使用者。 網路的每一層都定義了許多協議,有個協議的總稱,叫做“tcp/ip協議”,

Linux網路程式設計:TCP客戶/伺服器模型及基本socket函式

TCP客戶/伺服器模型 TCP連線的分組交換 在使用socket API的時候應該清楚應用程式和TCP協議棧是如何互動的: 呼叫connect()會發出SYN段(SYN是TCP報文段頭部的一個標誌位,置為1) 阻塞的read()函式返回0就表明收到了FIN段 客戶端呼叫c

Linux網路程式設計:socket程式設計簡介、網路位元組序及相關函式

Socket(套接字) socket可以看成是使用者程序與核心網路協議棧的程式設計介面(API函式)。 socket不僅可以用於本機的程序間通訊,還可以用於網路上不同主機的程序間通訊。 IPv4套接字地址結構 IPv4套接字地址結構通常也稱為“網際套接字地址結構”,它以

網路程式設計()——TCP程式設計基礎

目錄 1.基礎知識 1.1 IP協議 1.1.1  IP地址的分類 1.1.2 子網掩碼 1.1.3 網路位元組序 1.2傳輸控制協議(TCP) 1.2.1 TCP傳輸的特點 1.2.2 TCP的資料格式 1.2.3 建立連線與斷開連線 1.3.4

小飛俠帶你精通Python網路程式設計系列03-Python版本的選擇

1. 目前Python有兩個主要版本Python2.X和Python3.X 2. Python2.X最後一個版本是2.7,目前(2018年10月21日)Python3.X最新版本為3.7 3. 很不幸,Python3不完全相容Python2,事實上Python3 在2008年就釋出了,而最後一個Pytho

Linux網路程式設計案例分析

本程式碼來自於博主:輝夜星辰  本篇主要對執行程式碼中出現的問題進行分析,程式碼本身的內容後續展開討論。 伺服器端程式碼 1 /* 2 Linux網路程式設計之TCP程式設計,伺服器端讀資料 3 socket函式之後,返回值serfd,作為後面所有網路程式設計函式

7.3(java學習筆記)網路程式設計之UDP

一、UDP   UDP的全稱是User Datagram Protocol(使用者資料報協議),是一種無連線的不安全的傳輸協議,   傳輸資料時傳送方和接收方無需建立連線,所以是不安全的。   傳送時不建立連線直接傳送,傳送後不關注接受方能否接到。UDP只負責發出去,後續的事情與之無關。  

Linux網路程式設計---深刻理解5種基本IO模型

Linux五種IO模型 理解這五種I/O模型之前,我們得先清楚一個IO事件發生,它會經歷哪些步驟: 對於一個網路IO(network IO) (這裡我們以read舉例),它會涉及到兩個系統物件,一個是呼叫這個IO的process (or thread),另一個就是系統核心(kerne

Linux網路程式設計---詳解TCP的三次握手和四次揮手

我們知道,在TCP/IP協議中,TCP協議提供可靠的連線服務,是因為它有許多保證可靠連線的機制。可以分為3個方面: 1.確認應答機制:指的是不管哪一端傳送資料都需要確認回覆一下。 2.超時重傳機制,傳送後等待一段時間,不管是傳送失敗或者是還沒有收到回覆,那麼就認為資料傳輸失敗了;此時將會

Linux網路程式設計---I/O多路複用之select

1.I/O多路複用(IO multiplexing) 我們之前講了I/O多路複用和其他I/O的區別,在這裡,我們再具體討論下I/O多路複用是怎麼工作? I/O 多路複用技術就是為了解決程序或執行緒阻塞到某個 I/O 系統呼叫而出現的技術,使程序不阻塞於某個特定的 I/O 系統呼叫。

Linux網路程式設計---詳解HTTP協議

HTTP 簡介 HTTP協議是Hyper Text Transfer Protocol(超文字傳輸協議)的縮寫,是用於從全球資訊網(WWW:World Wide Web )伺服器傳輸超文字到本地瀏覽器的傳送協議。。 HTTP是一個基於TCP/IP通訊協議來傳遞資料(HTML 檔案,