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 ...
随机推荐
- 用普通计算机假设基于liunx系统的NAS部署FineReport决策系统
何为NAS? 简单说就是连接在网络上,具备资料存储功能的装置因此也称为“网络存储器”.它是一种专用数据存储服务器.他以数据为中心,将存储设备与服务器彻底分离,集中管理数据,从而释放带宽.提高性能.降低 ...
- hibernate学习-HibernateDemo
上篇文章我们讲述了eclipse安装hibernate插件的过程,这篇文章我们来做第一个HibernateDemo. 1).hibernate的jar开发包的下载,官网下载地址:http://hibe ...
- JavaScript代码段整理笔记系列(一)
30段JavaScript代码——上篇 1.如何区分IE及非IE浏览器: if(!+[1,]){ //IE 11 不支持 alert("这是 IE 浏览器"): }else{ al ...
- 第三方Android 模拟器流畅速度快,适合开发人员
“工欲善其事,必先利其器.” 使用Android模拟器开发和调试应用肯定比使用真机方便.但相比XCODE的IOS模拟器,Android SDK自带的AVD实在不争气,不过一些第三方的模拟器却表现不俗! ...
- hibernate关联映射
首先,建立user表,news表 建立User,News类 package com.example.hibernate; import java.util.Set; public class User ...
- Hemodynamic response function (HRF) - FAQ
Source: MIT - Mindhive What is the 'canonical' HRF? The very simplest design matrix for a given expe ...
- redis 学习笔记(7)-cluster 客户端(jedis)代码示例
上节学习了cluster的搭建及redis-cli终端下如何操作,但是更常用的场景是在程序代码里对cluster读写,这需要redis-client对cluster模式的支持,目前spring-dat ...
- [LeetCode] Rotate List 旋转链表
Given a list, rotate the list to the right by k places, where k is non-negative. For example:Given 1 ...
- [LeetCode] Longest Substring Without Repeating Characters 最长无重复子串
Given a string, find the length of the longest substring without repeating characters. For example, ...
- Codeforces Round #384(div 2)
A 题意:有n个机场处于一直线上,可两两到达,每个机场只可能属于两家公司中的一家(用0,1表示),现在要从a机场到b机场,可任意次转机.若机场i与机场j从属同一公司,则费用为0,否则费用为1.问最小费 ...