3天精通linux網路程式設計 一
基本tcp套接字程式設計。
客戶端程式:client.c
- #include <stdio.h>
- #include <unistd.h>
- #include <strings.h>
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <netinet/in.h>
- #include <arpa/inet.h>
- #include <netdb.h>
- #include <stdlib.h>
- #define PORT 1234
- #define MAXDATASIZE 100
- int main(int argc, char **argv)
- {
- int sockfd, num;
- char buf[MAXDATASIZE];
- struct hostent *he;
- struct sockaddr_in server;
- if(argc != 2)
- {
- printf("Uage: %s <IP ADDRESS>/n", argv[0]);
- exit(1);
- }
- if((he = gethostbyname(argv[1])) == NULL)
- {
- printf(
- exit(1);
- }
- if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
- {
- printf("socket() error.");
- exit(1);
- }
- bzero(&server, sizeof(server));
- server.sin_family = AF_INET;
- server.sin_port = htons(PORT);
- server.sin_addr = *((
- if(connect(sockfd, (struct sockaddr *)&server, sizeof(server)) == -1)
- {
- printf("connect() error/n");
- exit(1);
- }
- if((num = recv(sockfd, buf, MAXDATASIZE, 0)) == -1)
- {
- printf("revc() error!/n");
- exit(1);
- }
- buf[num - 1] = '/0';
- printf("server message: %s/n", buf);
- close(sockfd);
- }
伺服器端程式:server.c
- #include <stdio.h>
- #include <unistd.h>
- #include <string.h>
- #include <sys/socket.h>
- #include <sys/types.h>
- #include <netinet/in.h>
- #include <arpa/inet.h>
- #include <stdlib.h>
- #define PORT 1234
- #define BACKLOG 1
- int main(int argc, char **argv)
- {
- int listenfd, connectfd;
- struct sockaddr_in server;
- struct sockaddr_in client;
- socklen_t addrlen;
- if((listenfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
- {
- perror("socket error()!");
- exit(1);
- }
- int opt = SO_REUSEADDR;
- setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));
- bzero(&server, sizeof(server));
- server.sin_family = AF_INET;
- server.sin_port = htons(PORT);
- server.sin_addr.s_addr = htonl(INADDR_ANY);
- if(bind(listenfd, (struct sockaddr *)&server, sizeof(server)) == -1)
- {
- perror("Bind() error!");
- exit(1);
- }
- if(listen(listenfd, BACKLOG) == -1)
- {
- perror("listen() error!");
- exit(1);
- }
- addrlen = sizeof(client);
- if((connectfd = accept(listenfd, (struct sockaddr *)&client, &addrlen)) == -1)
- {
- perror("accept() error./n");
- exit(1);
- }
- printf("You got a connection from client's ip is %s, port is %d/n", inet_ntoa(client.sin_addr), htons(client.sin_port));
- send(connectfd, "WELCOME!/n", 10, 0);
- close(connectfd);
- close(listenfd);
- }
相關推薦
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 檔案,