Linux下的簡單socket程式設計示例

2021-05-25 05:45:20 字數 1735 閱讀 5864

api中用到的結構體

#1. struct sockaddrstruct sockaddr ;
sockaddr包含兩部分內容:
1. 短整型sa_family定義了位址家族型別,這個型別會用於socket()函式
2. 14位元組的sa_data陣列預留儲存本身的位址
注意:
1.原本沒有sa_len
2. 根據sa_family的不同型別,sa_data裡存放的可能是ip位址也可能是socket端點(socket endpoint)
3. 為了處理這個結構體,另乙個結構體常常被用到sockaddr_in(in是internal的意思)
#2. struct sockaddr_in
struct sockaddr_in ;
1. sin_family和sockaddr中的sa_family一樣
2. sin_port是埠號
3. sin_zero是保留段,一般全部置0
4. sin_addr和sin_port必須是符合網路位元組流順便的編碼

api中常用的方法

#1.int socket(int domain, int type, int protocol);
1. domain應該設定為af_inet,和sockaddr_in中一致
2. type告訴系統核心是那一種socket,比如sock_stream or sock_dgram
3. protocal一般是0,或者使用getprotobyname()方法獲取
4. 這個方法的返回值是乙個socket 辨識字(socket descriptor),可用來接下來的系統呼叫int bind(int sockfd, struct sockaddr *my_addr, int addrlen);
#2. int bind(int sockfd, struct sockaddr *my_addr, int addrlen);
1. sockfd就是上個方法中放回的辨識字
2. addrlen可以用sizeof(struct sockaddr)
#3. int connect(int sockfd, struct sockaddr *serv_addr, int addrlen);
#4. int listen(int sockfd, int backlog);

1. backlog 確定等待連線佇列的長度

2. 應該在使用listen之前呼叫bind方法,否則系統將會使用乙個隨機埠

#5. int accept(int sockfd, struct sockaddr *addr, int *addrlen);

#6.ssize_t write(int fd, const void *buf, size_t count);

#7.ssize_t read(int fd, void *buf, size_t count);

#8. int close(int sockfd);

Linux下簡單的socket程式設計

其實,有過window網路程式設計經驗的人,會很快的熟悉簡單的linux網路程式設計,其中大部分有關socket的命令都是相似的,其中存在的區別有二點 1.windows有關socket程式設計需要載入相關的鏈結庫,比如 ws2 32.lib,其中標頭檔案是,而linux下卻不需要載入這樣的連線庫,...

簡單的Linux下的socket程式

和c語言教程一樣,我們從乙個簡單的 hello world 程式切入 socket 程式設計。本節演示了 linux 下的 server.cpp 是伺服器端 client.cpp 是客戶端 要實現的功能是 客戶端從伺服器讀取乙個字串並列印出來。伺服器端 server.cpp include incl...

Linux 下基於socket的簡單網路聊天室

原文 經過親測除錯修改了部分內容 服務端程式 server.c include include 包含套接字函式庫 include include 包含af inet相關結構 include 包含af inet相關操作的函式 include include include include includ...