C 網路程式設計

2021-09-26 15:56:50 字數 3667 閱讀 9322

一、套接字

套接字:源ip位址和目的ip位址以及源埠號和目的埠號的組合稱為套接字。其用於標識客戶端請求的伺服器和服務。

常用的tcp/ip協議的3種套接字型別如下所示:

二、相關函式、結構體

2.1 套接字函式

套接字函式

描述linux:

int socket(int af, int type, int protocol);

windows:

socket socket(int af, int type, int protocol);

建立套接字

linux:

int bind(int sock, const struct sockaddr *myaddr, socklen_t addrlen);

windows:

int bind(socket sock, const struct sockaddr *addr, int addrlen);

繫結套接字

linux:

int listen(int sockfd, int backlog);

windows:

int listen(socket sock, int backlog);

進入監聽狀態

linux:

int accept(int sockfd, struct sockaddr *client_addr, socklen_t *len);

windows:

socket accept(socket sock, struct sockaddr *addr, int *addrlen);

等待客戶端連線

linux:

int connect(int sock_fd, struct sockaddr *serv_addr,int addrlen);

windows:

int connect(socket sock, const struct sockaddr *serv_addr, int addrlen);

客戶端連線伺服器

2.2 接受、傳送函式 函式

描述linux:

ssize_t write(int fd, const void *buf, size_t nbytes);

windows:

int send(socket sock, const char *buf, int len, int flags);

傳送資料

linux:

ssize_t read(int fd, void *buf, size_t nbytes);

windows:

int recv(socket sock, char *buf, int len, int flags);

讀取資料

2.3 相關結構體

結構體描述linux:

struct sockaddr_in

windows:

sockaddr_in

設定ip位址,埠等資訊

linux:

struct sockaddr

windows:

socket

設定ip位址,埠等資訊

2.4 ip、埠函式 函式

描述*int inet_pton(int family, const char *strptr, void *addrptr);

將ip位址在「點分十進位制」和「二進位制整數」之間轉換。而且,能夠處理ipv4和ipv6

*const char * inet_ntop(int family, const void *addrptr, char *strptr, size_t len);

將數值格式轉化為點分十進位制的ip位址格式。而且,能夠處理ipv4和ipv6

u_short htons(u_short hostshort);

將乙個無符號短整型的主機數值轉換為網路位元組順序,即大尾順序(big-endian)

ntohs():

network to host short,將short型別資料從網路位元組序轉換為主機位元組序。

htonl():

host to network long,將long型別資料從主機位元組序轉換為網路位元組序。

ntohl():

network to host long,將long型別資料從網路位元組序轉換為主機位元組序。

三、windows示列

服務端**

#include

#include

#pragma comment (lib, "ws2_32.lib")

//載入 ws2_32.lib

#define buf_size 100

intmain()

;while(1

)// 關閉套接字

closesocket

(serversock)

;// 終止dll使用

wsacleanup()

;}

客戶端**

#include

#include

#pragma comment(lib, "ws2_32.lib")

//載入 ws2_32.lib

#define buf_size 100

intmain()

;char bufrecv[buf_size]=;

while(1

)// 終止dll使用

wsacleanup()

;return0;

}

四、linux示列

服務端

#include

#include

#include

#include

#include

#include

#define buf_size 100

intmain()

;while(1

)// 關閉套接字

close

(serversock)

;}

客戶端

#include

#include

#include

#include

#include

#include

#define buf_size 100

intmain()

;char bufrecv[buf_size]=;

while(1

)return0;

}

C 網路程式設計

首先我們解釋一下在網路程式設計時候,經常遇到的幾個概念 同步 synchronous 非同步 asynchronous 阻塞 block 和非阻塞 unblock 所謂同步方式,就是傳送方傳送資料報以後,不等接受方響應,就接著傳送下乙個資料報。非同步方式就是當傳送方傳送乙個資料報以後,一直等到接受方...

C 網路程式設計

1 ip網路中的每台主機都有乙個ip位址 它是邏輯位址 網際網路上的ip位址具有全球唯一性 4個位元組,192.168.0.16 2 osi將網路分為 tcp ip模型 應用層 應用層 表示層會話層 傳輸層 傳輸層 網路層 網路層 資料鏈路層 網路介面 物理層相同層次之間不可以直接通訊,是虛擬通訊。...

c 網路程式設計

microsoft.framework為應用程式訪問inter 提供了分層的 可擴充套件的以及受管轄的網路服務,其名字空間system.和system.sockets包含豐富的類可以開發多種網路應用程式。類採用的分層結構允許應用程式在不同的控制級別上訪問網路,開發人員可以根據需要選擇針對不同的級別編...