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 函数的更多相关文章

  1. 使用socket()函数创建套接字

    在Linux中,一切都是文件,除了文本文件.源文件.二进制文件等,一个硬件设备也可以被映射为一个虚拟的文件,称为设备文件.例如,stdin 称为标准输入文件,它对应的硬件设备一般是键盘,stdout ...

  2. PHP Socket实现websocket(二)Socket函数

    PHP socket函数是调用系统的的Socket函数,可以参考C语言的socket函数. Socket函数:http://php.net/manual/en/book.sockets.php 服务器 ...

  3. Windows套接字Socket函数

    1.使用套接字函数之前,先要加载套接字函数库: #include "Winsock2.h" #pragma comment(lib,"Ws2_32.lib") ...

  4. socket函数

    为了执行网络IO,一个进程必须做的第一件事就是调用socket函数,指定期望的通信协议类型 int socket(int family,int type,int protocol); 其中,famil ...

  5. OVERLAPPED相关的socket函数介绍

    OVERLAPPED相关的socket函数介绍 上一篇文章介绍了<Windows核心编程>OVERLAPPED结构与内核对象IOCompletionPort相关概念,见http://www ...

  6. windows socket函数详解

    windows socket函数详解 近期一直用第三方库写网络编程,反倒是遗忘了网络编程最底层的知识.因而产生了整理Winsock函数库的想法.以下知识点均来源于MSDN,本人只做翻译工作.虽然很多前 ...

  7. python socket 函数介绍

    socket 函数原型:socket.socket([family[,type[,proto]]]) family参数取值(协议族): socket.AF_INET        -->ipv4 ...

  8. 【读书笔记】socket函数

    socket函数 简介 应用程序调用socket函数来创建一个能够进行网络通信的套接字. 1 2 3 4 5 /* 头文件 */ #include <sys/types.h> #inclu ...

  9. socket()函数介绍

    socket()函数介绍 socket函数介绍 函数原型 domain type protocol errno 示例 函数原型 socket()函数的原型如下,这个函数建立一个协议族为domain.协 ...

  10. php socket 函数

    创建基于socket的应用程序,就需要详细了解socket的操作方法,这里列举PHP中一些重要的socket函数.   1. socket_create ( int $domain , int $ty ...

随机推荐

  1. hibernate关联映射

    首先,建立user表,news表 建立User,News类 package com.example.hibernate; import java.util.Set; public class User ...

  2. javascript中的自执行函数

    学习es6的时候遇到了自执行函数,感觉有必要写下来,一方面加深自己的记忆,另一方面还能分享给大家. 什么是自执行函数? 自执行函数就是为了不污染全局变量命名空间的一中匿名函数,相当于自己创建了一个作用 ...

  3. 微信随机红包(Java)

    概述 最近受一朋友提醒,问微信红包怎么实现的,当时思考了一下,觉得好像很容易,可是当真正实现的时候,发现其中有不少问题,于是小白博主查阅资料,其中资料主要来源于知乎的一篇讨论<微信红包的随机算法 ...

  4. [翻译] Android是怎样绘制视图的

    原文:How Android Draws Views 当一个Activity获取到焦点的时候,它的布局就开始被绘制. 绘制的过程由Android framework处理.但布局层级的根节点必须由Act ...

  5. 理解OAuth 2.0

    转自:http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html OAuth是一个关于授权(authorization)的开放网络标准,在全世界得到广泛 ...

  6. 【20160722-20160728】NOI2016滚粗记&&酱油记&&游记

    先挖坑 #include <cstdio> using namespace std; int main(){ puts("转载请注明出处:http://www.cnblogs.c ...

  7. bzoj 1711 [Usaco2007 Open]Dining吃饭&&poj 3281 Dining

    最大流. 这东西好像叫三分图匹配. 源点向每个食物点连一条容量为1的边. 每个饮料点向汇点连一条容量为1的边. 将每个牛点拆点,食物点向喜欢它的牛的入点连一条容量为1的边,牛的出点向它喜欢的饮料点连一 ...

  8. 《Javascript高级程序设计》读书笔记(1-3章)

    第一章 JavaScript简介 1.1 JavaScript简史 略 1.2 JavaScript实现 虽然 JavaScript 和 ECMAScript 通常都被人们用来表达相同的含义,但 Ja ...

  9. linux文件文件夹递归监控

    引言 今年(2016)年初来到A公司了,刚入职的时候比较缺前端fe,就过来顶了三个月,这段时间学到了好多前端开发的知识,这些都是题外话了.期间接触了一个很好用的前端自动化部署工具 -- fis,其中有 ...

  10. springmvc 格式化使用Jackjson格式化报Failed to write HTTP message

    Failed to write HTTP message: org.springframework.http.converter.HttpMessageNotWritableException: Co ...