一个完整socket的相关描述(协议,本地地址,本地端口,远程地址,远程端口);
每个socket有一个本地的唯一socket号,由操作系统分配。
=====================================================================================
#include<sys/socket.h>
int socket(int domain,int type,int protocol); //成功返回描述符,出错返回-1。
domain:
AF_INET(IPv4因特网域)
AF_INET6(IPv6因特网域)
AF_UNIX(UNIX域)
AF_UNSPEC(未指定)
type:
SOCK_DGRAM(无连接基于数据报)
SOCK_STREAM(面向连接基于字节流)
SOCK_SEQPACKET(面向连接基于数据报)
SOCK_RAW(IP协议数据报接口)
protocol:
通常为0,表示选择默认协议。
(AF_INET、SOCK_DGRAM、UDP)
(AF_INET、SOCK_STREAM、TCP)
=====================================================================================
字节序列转换
转换端口号:
htons()
ntohs()
转换IP:
htonl()
ntohl()
=====================================================================================
通用地址格式
struct sockaddr{
unsigned short sa_family;//address族,AF_xxx
char sa_data[14]; //14字节的协议地址
}
sa_family一般来说,IPV4使用AF_INET。
sa_data包含了一项远程电脑的地址,端口和套接字的数目,里面的数据是杂溶在一起的
=====================================================================================
因特网地址格式
struct in_addr{
in_addr_t s_addr //ipv4
};
struct sockaddr_in{
short int sin_family; //地址族
unsigned short int sin_port; //端口号
struct in_addr sin_addr; //ip地址
unsigned char sin_zero[8]; //添0
}
=====================================================================================
地址格式转换
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
const char *inet_ntop(int domain,const void *addr,char *str,socklen_t cnt);//转换成点分十进制
成功返回字符串指针,出错返回NULL。
int inet_pton(int domain,const char *str,void *addr); //转换成二进制整数
成功返回1,无效格式返回0,出错返回-1。
======================================================================================
套接字域地址绑定
#include <sys/socket.h>
int bind(int sockfd,const struct sockaddr *addr,socklen_t len);//绑定地址并在/etc/servies中注册
int getsockname(int sockfd,struct sockaddr *addr,socklen_t alenp);//查找绑定到套接字的地址
int getpeername(int sockfd,struct asockaddr *addr,socklen_t *alenp);//获取对方地址
成功返回0,出错返回-1。
======================================================================================
客户端:
#include <sys/socket.h>
int connect(int sockfd,const struct sockaddr *addr,socklen_t len);
成功返回0,出错返回-1.
服务端:
#include <sys/socket.h>
int listen(int sockfd,int backlog);
成功返回0,出错返回-1.
int accept(int sockfd,struct sockaddr *addr,socklen_t len);
======================================================================================
tcp 用write read
======================================================================================
udp 用
#include <sys/socket.h>
ssize_t send(int sockfd,const void *buf,size_t nbytes,int flags);
ssize_t sendmsg(int sockfd,const struct msghdr *msg,int flags);
成功返回发送字节数,出错返回-1.
struct msghdr{
void *msg_name; //optional address
socklen_t msg_namelen; //address size in bytes
struct iovec *msg_iov; //array of I/O buffers
int msg_iovlen; //number of elements in array
void *msg_control; //number of ancillary bytes
int msg_flags; //flags for received message
}
ssize_t recv(int sockfd ,void *buf,size_t nbytes,int flags);//常用
ssize_t recvfrom(int sockfd ,
void *buf,
size_t len,
int flags,
struct sockaddr *addr,
socklen_t *addrlen);
ssize_t recvmsg(int sockfd,struct msghdr *msg,int flags);
返回消息字节数,无消息返回0,出错返回-1.
=======================================================================================
Unix c 网络编程——编程基础
原创
©著作权归作者所有:来自51CTO博客作者RandTsui的原创作品,请联系作者获取转载授权,否则将追究法律责任
上一篇:Unix c 网络编程 UDP
下一篇:Unix c 网络编程 TCP
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Unix c 网络编程 UDP
服务器端:========================================
udp 网络编程 unix socket c语言 -
Unix c 网络编程 TCP
服务器端:======================================
网络编程 tcp socket unix #include -
【linux】网络编程基础(c语言编程)
socket通信及tcp通信基础
tcp socket 网络编程 -
linux C 网络编程基础
TCP/IP基础UDP提供无连接服务 UDP的数据格式:#ifdef __FAVOR_BSDs
c语言 linux 网络编程 #include 套接字