创建套接字

创建套接字

    套接字描述符类似于文件描述符,UNIX、Linux把网络当文件看待,发送数据即写文件write,接收数 据即读文件read,销毁socket对象即关闭文件close,在UNIX、Linux系统下一切皆文件。
#include <sys/socket.h>
int socket (int domain, int type, int protocol);
功能:在内核中创建一个套接字对象
domain:通信地址类型
AF_UNIX/AF_LOCAL/AF_FILE: 本地通信(进程间通信)
AF_INET: 基于IPv4(32位IP地址)的网络通信
AF_INET6: 基于IPv6(128位IP地址)的网络通信
type:通信协议类型
SOCK_STREAM: 数据流协议,即TCP协议
SOCK_DGRAM: 数据报协议,即UDP协议
protocol:特别通信协议,一般不用,置0即可
返回值:成功返回套接字描述符,失败返回-1

套接字的连接

    当socket对象创建好以后,它并不能立即与其它socket对象无法找到它,需要把一个地址与它进行绑 定,这样它才能被其它socket对象连接并通信。
// 基本地址类型,它是socket系列接口的表面参数,而实际使用的是sockaddr_un或sockaddr_in
struct sockaddr
{
sa_family_t sa_family; // 地址类型,与创建socket对象时的domain参数一至即可
char sa_data[14]; // 它是只是占位而已
};
// 本地地址类型
#include <sys/un.h>
struct sockaddr_un
{
sa_family_t sun_family;
char sun_path[]; // 套接字文件路径
};
// 网络地址类型
#include <netinet/in.h>
struct sockaddr_in
{
sa_family_t sin_family;
in_port_t sin_port; // 端口号,用于区分通信方的进程,1024~65535
struct in_addr sin_addr; // IP地址
};
struct in_addr
{
in_addr_t s_addr; // 32位IPv4地址
};
typedef uint32_t in_addr_t;
#include <sys/socket.h>
int bind (int sockfd, const struct sockaddr* addr,socklen_t addrlen);
功能:将套接字和通信地址绑定在一起
addr:sockaddr_un、sockaddr_in结构变量的地址
addrlen:地址结构变量的字节数,便于bind区分用户提供的是sockaddr_un或sockaddr_in
返回值:成功返回0,失败返回-1
#include <sys/socket.h>
int connect (int sockfd, const struct sockaddr* addr,socklen_t addrlen);
功能:socket对象A连接socket对象B
sockfd:socket对象A的描述符,也就是连接的发起者
addr:socket对象B的通信地址,socket对象B必须与该通信地址绑定过
addrlen:地址结构变量的字节数
返回值:成功返回0,失败返回-1

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 Google Play应用市场对于应用的targetSdkVersion有了更为严格的要求。从 2018 年...
    申国骏阅读 64,803评论 15 98
  • 《来,我们说说孤独》 1·他们都在写孤独 一个诗人 如果 不说说 内心的孤独 不将孤独 写进诗里 是不是很掉价呢 ...
    听太阳升起阅读 4,443评论 1 7
  • 自幼贫民窟长大的女子,侥幸多念了两本书,枉以为可以与人平起平坐。可是人生从来都是接力赛,我们却天真的当成了百米冲刺...
    Leeanran阅读 5,808评论 1 5
  • 云舒老师,姓甚名谁,男的女的,多大岁数,这些我全然不知。之所以要写写云舒老师,完全是因为他写的文章,如一个巨大的磁...
    数豆者m阅读 2,439评论 6 9
  • """1.个性化消息: 将用户的姓名存到一个变量中,并向该用户显示一条消息。显示的消息应非常简单,如“Hello ...
    她即我命阅读 3,316评论 0 5