在认真的看UNP之前,一直被socket编程说的云里雾里,今天我要让大家从整天上认识socket编程,让我们知道socket编程的整个流程和各个函数的用法。这样:我们在写一些简单的socket编程时就不用被那么多函数和调用顺序所迷惑了。下面看UNP书上给的图片描述的建立连接的过程,看了之后一目了然!

    1.建立连接的概括图

    2.各个函数的用法:

      (1).socket()

        包含文件:#inlcude<sys/socket.h>

        函数原型:int socket(int family, int type, int protocol);

        参数说明:

            a.  family:一般为AF_INET(IPV4协议)

            b.  type  : SOCK_STREAM(字节流套接字)

                    SOCK_DGRAM(数据报套接字)

                  SOCK_SEQPACKET(有序分组套接字)

                  SOCK_RAW(原始套接字)

            c.  protocol:IPPROTO_TCP(TCP传输协议)

                     IPPROTO_UDP(UDP传输协议)

                   IPPROTO_SCTP( SCTP传输协议)

        返      回:若成功则为非负描述符,若出错则为-1;

        功  能:指定期望的通信协议类型(使用IPV4的TCP,使用IPV6的UDP,UNIX域字节流协议)。

      (2) . bind()

        包含文件:#include<sys/socket>

        函数原型:int bind(int sockfd, const struct sockaddr *myaddr, socklen_t addrlen);

        参数说明:

             a. sockfd: 套接字描述符

             b. myaddr: 指向特定于协议的地址结构指针

             c. addrlen: 地址结构的长度。

          返  回:若成功返回0,若出错则返回-1。

        功  能:把一个本地协议赋予一个套接字。对于网际网协议,协议地址是32为的IPV4地址或128位的IPV6地址与16位的TCP或UDP端口号的组合。

      (3) . listen()

        包含文件:#include<sys/socket.h>

        函数原型:int listen(int sockfd, int backlog);

        参数说明:

             a. sockfd: 套接字描述符

             b. baklog: (待研究,一般给默认值)

        返  回:若成功为0,若出错则为-1。

        功  能:仅由TCP服务器调用,listen将一个未连接的套接字转换成一个被动套接字,指示内核应该接受指向该套接字的请求。

      (4) . accept()

        包含文件:#include<sys/socket.h>

        函数原型:int accept(int sockfd, struct sockaddr *cliaddr, socklen_t *addrlen);

        参数说明:

             a. sockfd: 监听套接字描述符(由socket创建,随后用作bind和listen的第一个参数的描述符)

             b. cliaddr: 指向套接字地址结构的指针

             c.  addrlen:指向套接字地址结构的大小

        返  回:返回一个已连接套接字描述符。监听套接字描述符整个服务器期间只建立一个,而已连接套接字会有多个,对应相应的进程。

        功  能:用于从已完成连接队列队头返回下一个已完成连接,如果已完成队列连接队列为空,那么进程被投入睡眠(即阻塞)

      (5) . connect()

        包含文件:#include<sys/socket.h>

        函数原型:int connect(int sockfd, struct sockaddr *servaddr, socklen_t *addrlen);

        参数说明:

             a. sockfd: 监听套接字描述符

             b. cliaddr: 指向

        返  回:若成功为0,若出错则为-1

        功  能:仅由TCP服务器调用,listen将一个未连接的套接字转换成一个被动套接字,指示内核应该接受指向该套接字的请求。

      (6). close()

        包含文件:#include<unistd.h>

        函数原型:int close(int sockfd);

        参数说明:sockfd:要关闭的套接字的描述符

        返  回:若成功为0,若出错则为-1

        功  能:关闭套接字,并终止TCP连接。返回调用进程

socket编程:客户端与服务器间的连接以及各函数的用法的更多相关文章

  1. Windows Socket 编程_单个服务器对多个客户端简单通讯

    单个服务器对多个客户端程序: 一.简要说明 二.查看效果 三.编写思路 四.程序源代码 五.存在问题 一.简要说明: 程序名为:TcpSocketOneServerToMulClient 程序功能:实 ...

  2. 【python】网络编程-SocketServer 实现客户端与服务器间非阻塞通信

    利用SocketServer模块来实现网络客户端与服务器并发连接非阻塞通信.首先,先了解下SocketServer模块中可供使用的类:BaseServer:包含服务器的核心功能与混合(mix-in)类 ...

  3. android下socket编程问题:服务器关闭时,客户端发送请求的异常处理

    我用socket分别创建了一个服务器和一个客户端. 当服务器程序运行时,客户端和服务器发送接收数据是OK的. 但是,如果服务器程序关闭以后,客户端仍然发送请求的话,会抛出一个IOException.但 ...

  4. TCP客户端和服务器间传输数据遇到的TypeError: a bytes-like object is required, not &#39;str&#39;问题

    使用python实现python核心编程3第472页和474页的TCP时间戳服务器和客户端服务器间数据传输编程时遇到TypeError: a bytes-like object is required ...

  5. Socket编程——客户端,服务器端的读写操作

    URL网络编程,最大的特征就是一对一的响应! 1:客户端“写”,服务器端用于“读” package coreBookSocket2; import java.io.InputStreamReader; ...

  6. Java网络编程客户端和服务器通信

    在java网络编程中,客户端和服务器的通信例子: 先来服务器监听的代码 package com.server; import java.io.IOException; import java.io.O ...

  7. socket编程和并发服务器

    socket这个词可以表示很多概念: 在TCP/IP协议中,“IP地址+TCP或UDP端口号”唯一标识网络通讯中的一个进程,“IP地址+端口号”就称为socket. 在TCP协议中,建立连接的两个进程 ...

  8. 利用Python中SocketServer 实现客户端与服务器间非阻塞通信

    利用SocketServer模块来实现网络客户端与服务器并发连接非阻塞通信 版权声明 本文转自:http://blog.csdn.net/cnmilan/article/details/9664823 ...

  9. [ActionScript 3.0] NetConnection建立客户端与服务器的双向连接

    一个客户端与服务器之间的接口测试的工具 <?xml version="1.0" encoding="utf-8"?> <!--- - - - ...

随机推荐

  1. Calculating Stereo Pairs

    Calculating Stereo Pairs Written by Paul BourkeJuly 1999 Introduction The following discusses comput ...

  2. bnuoj 44359 快来买肉松饼

    http://www.bnuoj.com/contest/problem_show.php?pid=44359 快来买肉松饼 Time Limit: 5000 ms     Case Time Lim ...

  3. 为什么要Cssreset

    1.CssReset是什么?由于html标签在各浏览器的默认样式解析出来的有所不同.例如<ul>标签在IE.firefox.chrome浏览器下默认边距是不一样的.各浏览器的默认样,会给我 ...

  4. 安装mysql 5.5.14 报错

    提示cmake nod foundyum install cmake 原因是曾经服务器安装过mysql数据库Installing MySQL system tables...101223 14:28: ...

  5. NIR相机

    近红外(NIR)相机——专为低照度环境而设计的高灵敏度相机 近红外光”(Near-Infrared) 是介于可见光和中红外光间的电磁波,因此是不能被人眼所察觉到的.近红外优化工业相机广泛适用于交通监控 ...

  6. PHP不使用任何内置函数实现字符串翻转

    实现字符串翻转PHP本身自带一个函数就可以解决,strrev函数.这里不适用任何内置函数实现字符串翻转 案例一(纯字母): $str = 'abcdefghig k'; //假设测试的字符串/g与k之 ...

  7. pm2部署nodejs项目

    安装: 最新的PM2稳定版可通过NPM进行安装: npm install pm2@latest -g 用法: 启动,守护和监控应用程序的最简单的方法是使用以下命令行: pm2 start app.js ...

  8. 关于flutter插件地图的使用flutter_map

    关于flutter插件地图的使用flutter_map flutter_map A Dart implementation of Leaflet for Flutter apps.一个基于leafle ...

  9. 剑指offer面试题17:合并两个排序的链表

    题目:输入两个递增排序的链表,合并这两个链表并使新链表中的节点人是按照递增排序的.解题思路:两个链表分别都已经是有序的了,遍历链表的时候只要比较两个链表当前位置大小,取出最小的添加到新链表中. 可以有 ...

  10. iOS 指纹解锁 验证TouchID

    iOS指纹解锁 1.首先,引入依赖框架 LocalAuthentication.framework #import <LocalAuthentication/LocalAuthenticatio ...