C语言网络编程:socket函数
生活随笔
收集整理的這篇文章主要介紹了
C语言网络编程:socket函数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
函數描述
-
頭文件
<sys/types.h> <sys/socket.h> -
函數使用
int socket(int domain, int type, int protocol); -
函數功能:創建一個通信的終點,并返回一個文件描述符來代表通信的終點
-
函數參數:
a.domain代編當前創建的socket文件描述符使用的是哪一個協議族進行通信,這些協議族都包含在sys/socket.h,其中主要的協議族如下:AF_UNIX, AF_LOCAL本地進程通信AF_INETIPV4網絡傳輸層協議AF_INET6IPV6網絡傳輸層協議AF_IPIPX-Novell協議AF_NETLINK內核用戶接口設備
當前正式得協議族描述已經變為PF_INET。。。
TCP/IP協議族如下
b.
type函數socket()的參數type用于設置套接字通信的類型,指定使用TCP/IP協議族中的哪個子協議進行通信,主要有SOCKET_STREAM(流式套接字)、SOCK——DGRAM(數據包套接字)SOCK_STREAM提供有序的、可靠的、雙鏈接的、字節流數據傳輸;主要是用作TCP鏈接時的數據傳輸,此時如果想要使用TCP協議,則將domain設置為AF_INET即可SOCK_DGRAM支持無鏈接、不可靠的數據傳輸,數據傳輸時定長;主要時用作UDP鏈接時的傳輸SOCK_SEQPACKET提供有序的,可靠的,雙鏈接的數據傳輸通道,數據長度定長,使用的時候需要將數據全部讀出SOCK_RAWRAW類型,提供原始網絡協議訪問;即此時我們使用的通信協議為IP 協議SOCK_RDM提供可靠的數據報文,不過可能數據會有亂序SOCK_PACKET當前通信類型已經過時,不應在通信程序中使用SOCK_NOBLOCK將socket返回的文件描述符指定為非阻塞的,類似SOCK_STREAM | SOCK_NOBLOCK表示使用面向鏈接的數據傳輸同時非阻塞SOCK_CLOEXEC表示一旦進程執行exec系統調用之后,將會自動關閉socket返回的套接字文件描述符
c.
protocol特例化來一個協議,用來指定協議號
一般情況下protocol寫0,表示使用domain和type指定的協議,不過如果domain和type所指定的協議有好幾個時,此時就需要通過具體的協議號來區分,否則寫0即可。
所有的協議編號都被保存在了/etc/procotols下,tcp協議編號為6,udp協議編號為17ip 0 IP # internet protocol, pseudo protocol number hopopt 0 HOPOPT # IPv6 Hop-by-Hop Option [RFC1883] icmp 1 ICMP # internet control message protocol igmp 2 IGMP # Internet Group Management ggp 3 GGP # gateway-gateway protocol ipencap 4 IP-ENCAP # IP encapsulated in IP (officially ``IP'') ...類似如下
socket (AF_INET, SOCK_STREAM,6);和socket (AF_INET, SOCK_STREAM,0);都代表tcp協議
代碼舉例
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <errno.h>void print_err(char *str, int line, int err_no) {printf("%d, %s :%s\n",line,str,strerror(err_no));_exit(-1);
}int main()
{int skfd = -1;/*創建使用TCP通信的套接字文件描述符*/skfd = socket(AF_INET, SOCK_STREAM, 0);if ( -1 == skfd) {print_err("socket failed",__LINE__,errno);}return 0;
}
總結
以上是生活随笔為你收集整理的C语言网络编程:socket函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言网络编程:bind函数详解
- 下一篇: 顺丰快递笔记本电脑邮费+保价费,一共多少