UNIX网络编程之套接字API

int socket(int family, int type, int protocol); 该接口创建一个套接字

family指定协议族(通常是AF_INET);type参数指定socket的类型:SOCK_STREAM、SOCK_DGRAM、SOCK_RAW;protocol通常赋值"0"。

int bind(int sockfd, struct sockaddr *my_addr, int addrlen); 将套接字绑定到IP地址和端口

struct sockaddr_in 
        {
            short    sin_family;
            u_short  sin_port;
            struct   in_addr sin_addr;
            char     sin_zero[8];
        };

一个绑定的实例:

struct sockaddr_in saddr;
    memset((void *)&saddr,0,sizeof(saddr));
    saddr.sin_family = AF_INET;
    saddr.sin_port = htons(8888);端口号要大于1024
    saddr.sin_addr.s_addr = htonl(INADDR_ANY); 绑定到本地IP
    //saddr.sin_addr.s_addr = inet_addr("192.168.22.5"); 绑定固定IP
    bind(ListenSocket,(struct sockaddr *)&saddr,sizeof(saddr));

int listen(int sockfd, int backlog);

sockfd是socket系统调用返回的服务器端socket描述符;backlog指定在请求队列中允许的最大请求数

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

sockfd是被监听的服务器socket描述符,addr通常是一个指向sockaddr_in变量的指针,该变量用来存放提出连接请求的客户端地址

connect()函数用来与远端服务器建立一个TCP连接其函数原型为: 
     int connect(int sockfd, struct sockaddr *serv_addr, int addrlen);

int send(int sockfd, const void *msg, int len, int flags);

int recv(int sockfd,void *buf,int len,unsigned int flags);

int sendto(int sockfd, const void *msg,int len,unsigned int flags,const struct sockaddr *to,int tolen);用于面向非连接socket(SOCK_DGRAM/SOCK_RAW)上进行数据传输

int recvfrom(int sockfd,void *buf,int len,unsigned int flags,struct sockaddr *from,int *fromlen);

close(sockfd); close()是对套接字的操作,关闭后进程不能在访问这个套接字。

IP、DNS等相关函数

in_addr_t inet_addr(const char * strptr);将字符串IP地址转换为IPv4地址结构in_addr值

char * inet_ntoa(struct in_addr * addrptr);将IPv4地址结构in_addr值转换为字符串IP

struct hostent *gethostbyname(const char *name); 域名和IP地址的转换:

时间: 2024-10-05 07:15:21

UNIX网络编程之套接字API的相关文章

【UNIX网络编程】套接字编程简介

IPv4套接字地址结构: 通常也被成为“网际套接字地址结构”,以sockaddr_in命名,定义在<netinet/in.h>头文件中. struct in_addr { in_addr_t s_addr; // 32bits的ip地址,如0xFF000001 -> 127.0.0.1 }; /* Structure describing an Internet socket address. */ struct sockaddr_in { uint8_t sin_len; /* len

[python] 网络编程之套接字Socket、TCP和UDP通信实例

很早以前研究过C#和C++的网络通信,参考我的文章: C#网络编程之Tcp实现客户端和服务器聊天 C#网络编程之套接字编程基础知识 C#网络编程之使用Socket类Send.Receive方法的同步通讯 Python网络编程也类似.同时最近找工作笔试面试考察Socket套接字.TCP\UDP区别比较多,所以这篇文章主要精简了<Python核心编程(第二版)>第16章内容.内容包括:服务器和客户端架构.套接字Socket.TCP\UDP通信实例和常见笔试考题. 最后希望文章对你有所帮助,如果有不

TCP/IP网络编程之套接字类型与协议设置

套接字与协议 如果相隔很远的两人要进行通话,必须先决定对话方式.如果一方使用电话,另一方也必须使用电话,而不是书信.可以说,电话就是两人对话的协议.协议是对话中使用的通信规则,扩展到计算机领域可整理为"计算机间对话必备通信规则" 在TCP/IP网络编程之网络编程和套接字这一章中,我们已经介绍了如何创建套接字,但为了完全理解该函数,此处将继续展开讨论 #include <sys/socket.h> int socket(int domain, int type, int pr

Linux网络编程——原始套接字实例:简单版网络数据分析器

通过<Linux网络编程--原始套接字编程>得知,我们可以通过原始套接字以及 recvfrom( ) 可以获取链路层的数据包,那我们接收的链路层数据包到底长什么样的呢? 链路层封包格式 MAC 头部(有线局域网) 注意:CRC.PAD 在组包时可以忽略 链路层数据包的其中一种情况: unsigned char msg[1024] = { //--------------组MAC--------14------ 0xb8, 0x88, 0xe3, 0xe1, 0x10, 0xe6, // dst

Linux网络编程——原始套接字实例:MAC 头部报文分析

通过<Linux网络编程——原始套接字编程>得知,我们可以通过原始套接字以及 recvfrom( ) 可以获取链路层的数据包,那我们接收的链路层数据包到底长什么样的呢? 链路层封包格式 MAC 头部(有线局域网) 注意:CRC.PAD 在组包时可以忽略 链路层数据包的其中一种情况: 1 unsigned char msg[1024] = { 2 //--------------组MAC--------14------ 3 0xb8, 0x88, 0xe3, 0xe1, 0x10, 0xe6,

网络编程--Socket(套接字)

网络编程 网络编程的目的就是指直接或间接地通过网络协议与其他计算机进行通讯.网络编程中 有两个主要的问题,一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后 如何可靠高效的进行数据传输.在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的 路由,由IP地址可以唯一地确定Internet上的一台主机.而TCP层则提供面向应用的可靠的 或非可靠的数据传输机制,这是网络编程的主要对象,一般不需要关心IP层是如何处理数据 的. 目前较为流行的网络编程模型是客户机/服务器(C/S)结构

《网络编程》套接字地址与名字转换

前言 在套接字编程中,我们经常使用数字的 IP 地址和端口号进程编程,但是我们平常所熟悉的是一些便于记忆的字符名字,要使这种名字能够为套接字操作函数识别,所以这两者之间必须存在着某种转换关系.本节介绍的是 [主机名 与 地址] 和 [服务名 与 端口号] 之间的转换.在 Unix 系统中,可以使用函数 gethostbyname.gethostbyaddr 实现[主机名 与 地址]之间的转换:可以使用函数 getservbyname.getservbyport 实现 [服务名 与 端口号] 之间

《网络编程》套接字编程简介

本节介绍的套接字是可以实现不同计算机之间的远程进程间通信.套接口是网络进程的 ID,在网络中每一个节点都有一个网络地址,也就是 IP 地址,两个进程间通信时,首先要确定各自所在网络节点的网络地址.但是,网络地址只要确定进程所在的计算机,由于一台计算机上同时可能有多个网络进程,所以仅凭网络地址还不能确定是网络中的哪一个进程,因此套接口中还需要其他信息,也就是端口.在一台计算机中,一个端口号只能分配给一个进程,所以,进程和端口之间是一一对应的关系.因此,使用端口号和网络地址的组合就能唯一地确定整个网

网络编程之套接字socket

目录 socket套接字 引子 为何学习socket一定要先学习互联网协议 socket是什么 套接字类型 基于文件类型的套接字家族 基于网络类型的套接字家族 套接字工作流程 基于TCP的套接字 简单通信 加上链接循环与通信循环 基于UDP的套接字 UDP的套接字下的简单通信 UDP协议支持并发 粘包现象 什么是粘包 两种情况下会发生粘包 解决粘包问题的处理方法 简单方法(不推荐使用) 牛逼方法(利用struct模块打包报头) socketserver模块(实现并发) socketserver模