在认真的看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 'str'问题

    使用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. socket编程实现tcp服务器_C/C++

    1. 需求分析 实现一个回声服务器的C/S(客户端client/服务器server)程序,功能为客户端连接到服务器后,发送一串字符串,服务器接受信息后,返回对应字符串的大写形式给客户端显示. 例如: ...

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

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

随机推荐

  1. 设计模式22---设计模式之解释器模式(Interpreter)(行为型)

    1.讲解解释器模式 1.1解释器模式定义 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子. 1.2解释器模式要点 解析器:把描述客户端调用要求的表达式, ...

  2. JavaScript函数的四种存在形态

    函数的四种存在形态: 1.函数形态 2.方法形态 将函数赋值给某一个对象的成员,那么就称为方法 3.构造器形态 4.上下文形态   1.函数形态: var foo = function() { ale ...

  3. jQuery ajax 传递数组到struts2

    使用jQuery的$.ajax()方法进行异步交互时,如果传递的数据有数组(例如传输checkbox数据),Action中经常会接受不到数据. 此时应该注意一下data中数组的写法,例如: //组合成 ...

  4. 【Android】数据的应用-使用sharedpreferences存储数据

    Android应用开发SharedPreferences存储数据的使用方法 SharedPreferences是Android中最容易理解的数据存储技术,实际上SharedPreferences处理的 ...

  5. StringHelper类,内容截取,特别适合资讯展示列表

    public class StringHelper    {        /// <summary>        /// 截字符串        /// </summary> ...

  6. Android中Cursor类的概念和用法

    http://blog.sina.com.cn/s/blog_618199e60101fskp.html 使用过 SQLite数据库的童鞋对 Cursor 应该不陌生,加深自己和大家对Android ...

  7. get 和 post的使用.

    Two commonly used methods for a request-response between a client and server are: GET and POST. GET  ...

  8. 导入sql时报日期类型错误

    导入的脚本中有的日期类型数据是:0000-00-00 00:..这种格式的. 需要把这种格式修改一下.有的mysql版本不支持这种0000.设置成当前时间即可

  9. ResultSetMetaData rsmd = rs.getMetaData()是什么意思?

    ResultSetMetaData rsmt=rs.getMetaData(); 得到结果集(rs)的结构,比如字段数.字段名等.使用rs.getMetaData().getTableName(1)) ...

  10. 完美让IE兼容input placeholder属性的jquery实现

    调用时直接引用jquery与下面的js就行了,相对网上的大多数例子来说,这个是比较完美的方案. /* * 球到西山沟 * http://www.cnzj5u.com * 2014/11/26 12:1 ...