日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

C语言网络编程:socket函数

發(fā)布時間:2023/11/27 生活经验 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言网络编程:socket函数 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

函數(shù)描述

  • 頭文件 <sys/types.h> <sys/socket.h>

  • 函數(shù)使用int socket(int domain, int type, int protocol);

  • 函數(shù)功能:創(chuàng)建一個通信的終點,并返回一個文件描述符來代表通信的終點

  • 函數(shù)參數(shù):
    a. domain 代編當(dāng)前創(chuàng)建的socket文件描述符使用的是哪一個協(xié)議族進(jìn)行通信,這些協(xié)議族都包含在sys/socket.h,其中主要的協(xié)議族如下:

    • AF_UNIX, AF_LOCAL 本地進(jìn)程通信
    • AF_INET IPV4網(wǎng)絡(luò)傳輸層協(xié)議
    • AF_INET6 IPV6網(wǎng)絡(luò)傳輸層協(xié)議
    • AF_IP IPX-Novell協(xié)議
    • AF_NETLINK 內(nèi)核用戶接口設(shè)備
      當(dāng)前正式得協(xié)議族描述已經(jīng)變?yōu)?code>PF_INET。。。
      TCP/IP協(xié)議族如下

    b. type函數(shù)socket()的參數(shù)type用于設(shè)置套接字通信的類型,指定使用TCP/IP協(xié)議族中的哪個子協(xié)議進(jìn)行通信,主要有SOCKET_STREAM(流式套接字)、SOCK——DGRAM(數(shù)據(jù)包套接字)

    • SOCK_STREAM 提供有序的、可靠的、雙鏈接的、字節(jié)流數(shù)據(jù)傳輸;主要是用作TCP鏈接時的數(shù)據(jù)傳輸,此時如果想要使用TCP協(xié)議,則將domain設(shè)置為AF_INET即可
    • SOCK_DGRAM 支持無鏈接、不可靠的數(shù)據(jù)傳輸,數(shù)據(jù)傳輸時定長;主要時用作UDP鏈接時的傳輸
    • SOCK_SEQPACKET 提供有序的,可靠的,雙鏈接的數(shù)據(jù)傳輸通道,數(shù)據(jù)長度定長,使用的時候需要將數(shù)據(jù)全部讀出
    • SOCK_RAW RAW類型,提供原始網(wǎng)絡(luò)協(xié)議訪問;即此時我們使用的通信協(xié)議為IP 協(xié)議
    • SOCK_RDM 提供可靠的數(shù)據(jù)報文,不過可能數(shù)據(jù)會有亂序
    • SOCK_PACKET 當(dāng)前通信類型已經(jīng)過時,不應(yīng)在通信程序中使用
    • SOCK_NOBLOCK 將socket返回的文件描述符指定為非阻塞的,類似SOCK_STREAM | SOCK_NOBLOCK 表示使用面向鏈接的數(shù)據(jù)傳輸同時非阻塞
    • SOCK_CLOEXEC 表示一旦進(jìn)程執(zhí)行exec系統(tǒng)調(diào)用之后,將會自動關(guān)閉socket返回的套接字文件描述符

    c. protocol 特例化來一個協(xié)議,用來指定協(xié)議號
    一般情況下protocol寫0,表示使用domaintype指定的協(xié)議,不過如果domaintype所指定的協(xié)議有好幾個時,此時就需要通過具體的協(xié)議號來區(qū)分,否則寫0即可。
    所有的協(xié)議編號都被保存在了/etc/procotols下,tcp協(xié)議編號為6,udp協(xié)議編號為17

    ip	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協(xié)議

代碼舉例

#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;/*創(chuàng)建使用TCP通信的套接字文件描述符*/skfd = socket(AF_INET, SOCK_STREAM, 0);if ( -1 == skfd) {print_err("socket failed",__LINE__,errno);}return 0;
}

總結(jié)

以上是生活随笔為你收集整理的C语言网络编程:socket函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。