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_INET
IPV4网络传输层协议AF_INET6
IPV6网络传输层协议AF_IP
IPX-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_RAW
RAW类型,提供原始网络协议访问;即此时我们使用的通信协议为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函数相关推荐
- go net.conn读取请求头信息_go语言网络编程socket sever的实现
首先说一下socket,网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket(百度百科). 图片来源于网络 其本质就是就是编程接口(API),对TCP.UDP的封装 ...
- 网络编程-----socket函数
1.Socket()函数: 访问底层操作系统接口的全部方法,提供服务中心类,简化网络服务器的开发; 语法:socket.socket(family([,type,proto]]]) family: 套 ...
- 网络编程 socket函数参数介绍
SOCKET参数: 1.地址的类型 a.AF_INET 2 internet协议版本4(ipv4)地址系列. b.AF_INET6 23 Internet协议版本6(ipv6)地址系列. c.AF ...
- C语言网络编程函数与相关结构汇总
持续更新中- 服务器和客户端的一般流程 服务器端:socket()-->bind( )-->listen()-->accept()-->read()/write()---> ...
- 网络编程socket之connect函数
网络编程socket api存在一批核心接口,而这一批核心接口就是几个看似简单的函数,尽管实际上这些函数没有一个是简单.connect函数就是这些核心接口的一个函数,它完成主动连接的过程. conne ...
- 网络编程socket之accept函数
网络编程socket之accept函数 摘要:对于服务器编程中最重要的一步等待并接受客户的连接,那么这一步在编程中如何完成,accept函数就是完成这一步的.它从内核中取出已经建立的客户连接,然后把这 ...
- C语言网络编程:多路IO select实现多客户端
文章目录 阻塞式的服务器程序 多线程服务器程序 非阻塞式服务器程序 基于事件响应的服务器程序 事件响应服务器程序的实现`select` 阻塞式的服务器程序 我们接触过最多的最基础的网络通信模型为TCP ...
- Python网络编程socket
网络编程之socket 看到本篇文章的题目是不是很疑惑,what is this?,不要着急,但是记住一说网络编程,你就想socket,socket是实现网络编程的工具,那么什么是socket,什么是 ...
- 树莓派:入门(基础配置、GPIO、网络编程 Socket)
树莓派在创客中越来越发挥重要的作用,树莓派的强大兼用性和功能丰富,得到 DIY 朋友的青睐.带大家认识目前最新的树莓派 3B+,从零基础到入门,到动手做有趣的应用. 本场 Chat 首先会带领大家入门 ...
- C语言网络编程(3)— 通过DNS连接到百度
C语言网络编程(3)- 通过DNS连接到百度 一.gethostbyname()函数 我们现在认知一台计算机主机通常采用直观可读的名字.例如百度我们会记住 www.baidu.com 而不是他的IP地 ...
最新文章
- 对Linux Kernel 4.15的支持的VirtualBox 5.2.8发布
- 云原生微服务架构的技术内涵
- 大咖说:React Native 全埋点实现原理(内附赠书)
- Hdu 1754 . I Hate It
- 如何将JAR添加到Jetbrains MPS项目
- java ajax 定时刷新_用ajax技术实现无闪烁定时刷新页面
- Web端调用Outlook 的发信窗口
- Mac OS 搭建phonegap开发环境
- “华为杯”第十八届中国研究生数学建模竞赛一等奖经验分享
- 弦图(Chordal Graph)学习小记
- C语言统计1到100素数的个数,统计1到100素数的个数
- 企业研发人员配备比例_高新技术企业对研发技术人员占企业总职工人数的比例为多少?...
- PTA 7-28猴子选大王(约瑟夫问题)
- 苹果手机显示有4g上不了网络连接服务器,苹果移动数据为什么叫蜂窝网络_蜂窝移动数据和4g有什么区别...
- LeetCode_回文数(三种解法-Java)
- 如何跨网络远程操作另一台计算机,如何远程控制另一台电脑?
- python爬取喜马拉雅FM音频
- [NFC]NDEF和RTD协议介绍
- 0基础学RS(三)路由器基本配置
- __init__() takes 1 positional argument but 5 positional arguments (and 1 keyword-only argument) were
热门文章
- CodeForces 595A
- mysql操作数字名称的schema时字符的逃逸问题
- php去除字符串首尾空格(包括全角)(转)
- 接口有个电池标志_USB接口上的小标签有啥用?从“+”号到闪电的奥秘
- fcm算法的MATLAB实现,FCM算法的matlab程序(初步)
- 基于python的证件照_20行代码教你用python给证件照换底色的方法示例
- mysql存储过程查询实例_mysql存储过程查询实例
- python获取天气分析_Python爬取南京市往年天气预报,使用pyecharts进行分析
- 同源策略禁止读取位于_用浏览器缓存绕过同源策略(SOP)限制
- java for嵌套for循环语句_java中的for循环嵌套语句怎么执行?