linux socket 编程总结
来源:互联网 发布:中南工程咨询设计 知乎 编辑:程序博客网 时间:2024/05/22 22:52
#include<sys/types.h>
#include<sys/socket.h>
int socket(int domain, int type, int protocol);
domain参数 可指定的协议族
type
SOCK_STREAM 和 SOCK_DGRAM
套接字地址
AF_UNIX 套接字来说,它的地址由sockaddr_un来描述,该结构定义在头文件sys/un.h中
struct sockaddr_un{ sa_family_t sun_family;/*AF_UNIX*/ char sun_path[];/*pathname*/}在AF_INET域中,套接字地址由sockaddr_in来指定,该结构定义在netinet/in.h中,它至少包含以下几个成员:
struct sockaddr_in{ short int sin_family;/*AF_UNIX*/ unsigned short int sin_port;/*Port number*/ struct in_addr sin_addr;/**Internet address/}IP地址结构in_addr被定义为:
struct in_addr{ unsigned long int s_addr;}
命名套接字
#include<sys/socket.h>int bind(int socket, const struct sockaddr *address, size_t address_len);地址的长度和格式取决于地址族,如上。需要强制转换成需要的结构(struct sockaddr *)
创建套接字队列
#include <sys/socket.h>int listen(int socket, int backlog);
backlog 设置队列中可以容纳的未处理链接的最大数目
接受连接
#include <sys/socket.h>int accept(int socket, struct sockaddr *address, size_t *address_len);
返回新的套接字的描述符,第2个参数返回客户的地址,第3个参数返回客户地址的长度
如果套接字队列中没有未处理的连接,accecpt函数将阻塞直到客户建立连接为止。我们可以通过对套接字文件描述符设置O_NONBLOCK标志来改变这一行为,使用函数是fnctl:
int flags = fnctl(socket,F_GETFL,0);fnctl(socket, F_SETFL,O_NONBLOCK|flags);
请求连接
#include<sys/socket.h>int connect(int socker, const struct sockaddr *address, size_t address_len);
参数socket指定的套接字将连接到参数address指定的服务器套接字,address指向的结构的长度由参数address_len指定。
主机字节序&&网络字节序
不同类型的计算机使用不同的字节序来表示整数,如大小端,解释字节的方式。因此需要定义一个网络字节序使得各个设备之间保持一致。
#include <netinet/in.h>unsigned long int htonl(unsigned long int hostlong);unsigned short int htons(unsigned short int hostshort);unsigned long int ntohl(unsigned long int netlong);unsigned short int ntohs(unsigned short int netshort);
套接字选项
#include <sys/socket.h>int setsockopt(int sock, int level, int option_name,const void *option_value, size_t option_len);
选项说明SO_DEBUG打开调试信息SO_KEEPALIVE通过定时传输保持存活报文来维持了连接SO_LINGER在close调用返回之前完成传输工作
网络信息
主机数据库在接口头文件netdb.h中声明
#include <netdb.h>struct hostent *gethostbyaddr(const void *addr, size_t len, int type);struct hostent *gethostbyname(const char *name);struct hostent { char *h_name;/*name of the host*/ char **h_aliases;/*list of aliases(nicknames)*/ int h_addrtype;/*address type*/ int h_length;/*length in bytes of the address*/ char **h_addr_list/*list of address (network order)*/};
与服务及其相关的信息可以通过一些服务函数来获取
#include <netdb.h>struct servent { char *s_name; /*name of the service*/ char **s_aliases; /*list of aliases(alternative names)*/ int s_port;/*The IP port number*/ char *s_proto; /*The service type , unsually "tcp" or "udp"*/};
#include <arpa/inet.h>char *inet_ntoa(struct in_addr in);
这个函数的作用是:将一个因特网主机地址转换为一个点分四元组式的字符串
#include <inistd.h>int gethostname(char *name, int namelength);
这个函数的作用是:将当前主机的名字写入name指向的字符串。若主机名将被截断
tips:
通过killall serve1来杀死程序阅读全文
0 0
- Linux Socket编程 总结
- Linux Socket编程 总结
- linux socket 编程总结
- linux之socket编程总结
- linux socket编程相关知识的总结
- Linux Socket编程的一些总结
- Linux socket 网络编程常用函数总结
- linux应用编程:socket 常用API总结
- Linux socket 网络编程常见问题总结
- Linux socket编程的心跳机制总结
- linux下socket编程小总结
- Linux C 总结篇(socket编程)
- 【Linux编程】socket编程
- socket编程总结(1)
- socket编程总结(2)
- SOCKET编程简单总结
- Socket编程总结
- java socket编程总结
- Java并发:Callable与Future的应用
- Python OOP容器设计时合理引入列表方法
- R数组、列表、数据框、因子
- 计蒜客 2017 NOIP 提高组模拟赛(一)题解
- 关键帧逐帧蒙皮动画原理
- linux socket 编程总结
- 欢迎使用CSDN-markdown编辑器
- varchar2,varchar,text,clob区别
- JavaScript的事件流
- binder
- java程序里实现ssh, scp, sftp
- Apache/Nginx为PHP设置、添加$_SERVER服务器环境变量
- java学习路线图
- Knox的安装与部署(五)