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 ...
随机推荐
- Leetcode: Convert sorted list to binary search tree (No. 109)
Sept. 22, 2015 学一道算法题, 经常回顾一下. 第二次重温, 决定增加一些图片, 帮助自己记忆. 在网上找他人的资料, 不如自己动手. 把从底向上树的算法搞通俗一些. 先做一个例子: 9 ...
- Spring 01基础
一.Spring作用:管理项目中各种业务Bean(service类.Dao类.Action类),实例化类,属性赋值 二.Spring IOC(Inversion of Control )控制反转,也被 ...
- JavaScript第一节课
1.用法:位于<script></script>可以位于body和head中,不限制标签数量,也可以创建外部Js文件,然后引入.(引入方法:<script src=&qu ...
- [LeetCode] Remove Nth Node From End of List 移除链表倒数第N个节点
Given a linked list, remove the nth node from the end of list and return its head. For example, Give ...
- java 分页功能
1.分页工具类 package com.bw.shop.util; import java.util.List; import com.sun.org.apache.regexp.internal.r ...
- Masonry介绍与使用实践:快速上手Autolayout
1 MagicNumber -> autoresizingMask -> autolayout 以上是纯手写代码所经历的关于页面布局的三个时期 在iphone1-iphone3gs时代 w ...
- 关于javascript的运动教程
一.javascript的匀速运动 关于物体的javascript匀速运动要点分析: 1.物体关于运动的时候,我们要打开定时器 2.打开定时器的时候我们记得要在停止的时候关闭定时器,同时应该注意的是一 ...
- 【BZOJ 4581】【Usaco2016 Open】Field Reduction
http://www.lydsy.com/JudgeOnline/problem.php?id=4581 考虑\(O(n^3)\)暴力. 实际上枚举最靠边的三个点就可以了,最多有12个点. 还是暴力= ...
- redis-内存异常 Redis is configured to save RDB snapshots解决
连接reids获取数据时提示 Redis is configured to save RDB snapshots, but is currently not able to persist on di ...
- NPOI导出数据,设置格式,锁定单元格
代码包括: 1:导出多个sheet 2:设置单元格格式 3:合并单元格 4:下拉框选项 5:输入数字限制 6:锁定单元格 static void Main(string[] ar ...