socket 函数
1.创建套接字并返回一个描述符,该描述符可以用来访问套接字
#include<sys/types.h>
#include<sys/socket.h>
int socket(int domain, int type ,int protocol);
//domain 指定协议族 ,type指定套接字通信类型,protocol 指定使用的协议
domain 参数可以如下 : AF_UNIX//UNIX域协议(文件系统套接字)
AF_INET //ARPA因特网协议(UNIX网络套接字)
AF_ISO //ISO标准协议
AF_NS //施乐(Xerox)网络系统协议
AF_IPX //Novell IPX 协议
AF_APPLETALK//Appletalk DDS
types 参数如下 :SOCK_STREAM //可靠有序,面向链接的双向字节流, SOCK_DGRAM //数据服务流
protocol 一般默认为0即可
2.套接字地址
每个套接字都有自己的地址格式,对AF_UNIX域套接字来说,由结构sockaddr_un 来描述,定义在头文件 sys/un.h
地址格式:
常用的有两种socket域:AF_UNIX或AF_INET,因此就有两种地址格式:sockaddr_un和sockaddr_in,分别定义如下:
struct sockaddr_in {
shrot int sin_family;//与创建时候的协议族保持一致
unsigned short int sin_port;//端口, 1024 以上
struct in_addr sin_addr;
}
IP地址结构 in_addr 的定义
struct in_addr{
unsigned long int s_addr;//IP地址inet_addr("127.0.0.1"); 这个函数将IP地址返回为这个格式的
}
struct sockaddr_un
{
sa_family_t sun_family; ////与创建时候的协议族保持一致
char sun_path[]; //命名的名称
}
3.套接字命名,
想要通过socket调用创建的套接字可以被其他进程使用,服务器程序就必须给该套接字命名。这样AF——UNIX套接字就会关联
到一个文件系统的路径名,
#include<sys/socket.h>
int bind(int socket , const struct sockaddr *address.size_t address_len);
bind 系统调用把address中的地址分配给与文件描述符socket关联的为命名套接字,地址结构的长度由参数 address_len传递
地址的长度和格式取决于地址族,bind调用需要将一个特定的地址结构指针转换为只想通用地址类型 struct sockaddr *
bind 调用成功返回0。失败反-1
4.创建套接字列队
为了能够在套接字上接受进入的连接,服务器程序必须创建一个列队来保存未处理的请求,
#include<socket.h>
int listen(int socket ,int backlog);
backlog 为未处理连接最大数目,一般为5
listen成功返回0,失败-1
5.接受连接
一旦服务器程序创建并命名了套接字以后,他就可以通过 accept 系统调用来等待客户建立对应套接字的连接
#include<sys/socket.h>
int accept (int socket .struct sockaddr *address ,size_t *address_len)
accept系统调用只有当 有客户程序试图连接到 socket参数指定的套接字时才返回。
6.请求连接
客户程序通过在一个未命名套接字和服务器监听套接字之间建立连接的方法来连接服务器,
#include<sys/socket.h>
int connect(int socket ,const struct sockaddr *address ,size_t address_len);
socket参书指定的套接字将连接到这个服务器的套接字
address 只想结构的长度由address_len指定,
7.关闭套接字
close(int socket) 关闭套接字
8.返回对应于给定地址的主机信息。主机名,IP地址等
#include<netdb.h>
struct hostent *gethostbyaddr(const void * addr, size_t len, int type);
addr:指向网络字节顺序地址的指针。
len: 地址的长度,在AF_INET类型地址中为4。
type:地址类型,应为AF_INET。
struct hostent {
char FAR * h_name; 正规的主机名字(PC)
char FAR * FAR * h_aliases; 一个以空指针结尾的可选主机名队列
short h_addrtype; 返回地址的类型,对于Windows Sockets,这个域总是PF_INET。
short h_length;每个地址的长度(字节数),对应于PF_INET这个域应该为4。
char FAR * FAR * h_addr_list; 应该以空指针结尾的主机地址的列表,返回的地址是以网络顺序排列的}
9.返回对应于给定服务名和协议名的相关服务信息。
#include<netdb.h>
sturct servent *getservbyname(const char *name ,const char *proto )
name: 一个指向服务名的指针。
proto: tcp或udp
struct servent {
char FAR * s_name; 正规的服务名。
char Far * FAR * s_aliases; 一个以空指针结尾的可选服务名队列。
short s_port; 连接该服务时需要用到的端口号,返回的端口号是以网络字节顺序排列的。
char FAR * s_proto; 连接该服务时用到的协议名。
};
10.返回本地主机的标准主机名
#include<unistd.h>
int gethostname(char *name ,int namelength);
name: 一个指向将要存放主机名的缓冲区指针。
namelen:缓冲区的长度。
11.
#include<arpa/inet.h>
char *inet_ntoa(struct in_addr in);
将in_addr 格式的IP地址转换成 4个点格式的。
socket 函数的更多相关文章
- 使用socket()函数创建套接字
在Linux中,一切都是文件,除了文本文件.源文件.二进制文件等,一个硬件设备也可以被映射为一个虚拟的文件,称为设备文件.例如,stdin 称为标准输入文件,它对应的硬件设备一般是键盘,stdout ...
- PHP Socket实现websocket(二)Socket函数
PHP socket函数是调用系统的的Socket函数,可以参考C语言的socket函数. Socket函数:http://php.net/manual/en/book.sockets.php 服务器 ...
- Windows套接字Socket函数
1.使用套接字函数之前,先要加载套接字函数库: #include "Winsock2.h" #pragma comment(lib,"Ws2_32.lib") ...
- socket函数
为了执行网络IO,一个进程必须做的第一件事就是调用socket函数,指定期望的通信协议类型 int socket(int family,int type,int protocol); 其中,famil ...
- OVERLAPPED相关的socket函数介绍
OVERLAPPED相关的socket函数介绍 上一篇文章介绍了<Windows核心编程>OVERLAPPED结构与内核对象IOCompletionPort相关概念,见http://www ...
- windows socket函数详解
windows socket函数详解 近期一直用第三方库写网络编程,反倒是遗忘了网络编程最底层的知识.因而产生了整理Winsock函数库的想法.以下知识点均来源于MSDN,本人只做翻译工作.虽然很多前 ...
- python socket 函数介绍
socket 函数原型:socket.socket([family[,type[,proto]]]) family参数取值(协议族): socket.AF_INET -->ipv4 ...
- 【读书笔记】socket函数
socket函数 简介 应用程序调用socket函数来创建一个能够进行网络通信的套接字. 1 2 3 4 5 /* 头文件 */ #include <sys/types.h> #inclu ...
- socket()函数介绍
socket()函数介绍 socket函数介绍 函数原型 domain type protocol errno 示例 函数原型 socket()函数的原型如下,这个函数建立一个协议族为domain.协 ...
- php socket 函数
创建基于socket的应用程序,就需要详细了解socket的操作方法,这里列举PHP中一些重要的socket函数. 1. socket_create ( int $domain , int $ty ...
随机推荐
- Junit mockito解耦合测试
Mock测试是单元测试的重要方法之一. 1.相关网址 官网:http://mockito.org/ 项目源码:https://github.com/mockito/mockito api:http:/ ...
- 【codevs1106】 篝火晚会
http://codevs.cn/problem/1106/ (题目链接) 题意 将1~n顺序排列的环改成另一个环,问n-不动点数. Solution 啊智障啦,不会做×_× 左转hzwer 代码 / ...
- 解读ASP.NET 5 & MVC6系列(16):自定义View视图文件查找逻辑
之前MVC5和之前的版本中,我们要想对View文件的路径进行控制的话,则必须要对IViewEngine接口的FindPartialView或FindView方法进行重写,所有的视图引擎都继承于该IVi ...
- [LeetCode] Department Top Three Salaries 系里前三高薪水
The Employee table holds all employees. Every employee has an Id, and there is also a column for the ...
- Stack的三种含义
作者: 阮一峰 日期: 2013年11月29日 学习编程的时候,经常会看到stack这个词,它的中文名字叫做"栈". 理解这个概念,对于理解程序的运行至关重要.容易混淆的是,这个词 ...
- AngularJS指令
1. AngularJS指令的特点: AngularJS通过被称为指令的新属性来扩展HTML,指令的前缀为ng-. AngularJS通过内置的指令来为应用添加功能. AngularJS允许你自定义指 ...
- asp.net webservice返回json问题
使用jQuery $.ajax方法请求webservice 一.方法返回值为string,将json格式的字符串返回 设置contentType为"application/json;char ...
- jQuery 邮箱下拉列表自动补全
综述 我想大家一定见到过,在某个网站填写邮箱的时候,还没有填写完,就会出现一系列下拉列表,帮你自动补全邮箱的功能.现在我们就用jQuery来实现一下. 博主原创代码,如有代码写的不完善的地方还望大家多 ...
- weui 多网页切换效果分析
weui的文档写的不怎么详尽,简单的来讲WeUI 为微信 Web 服务量身设计的h5框架. WeUI是一套同微信原生视觉体验一致的基础样式库,由微信官方设计团队为微信 Web 开发量身设计,可以令用户 ...
- bzoj1251
1251: 序列终结者 Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 3776 Solved: 1581[Submit][Status][Discu ...