在认真的看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. JAVA正则忽略大小写

    java正则表达式:  (?i)abc  表示abc都忽略大小写  a(?i)bc   表示bc忽略大小写  a((?i)b)c   表示只有b忽略大小写 也可以用Pattern.compile(re ...

  2. Java解析XML文档(简单实例)——dom解析xml

      一.前言 用Java解析XML文档,最常用的有两种方法:使用基于事件的XML简单API(Simple API for XML)称为SAX和基于树和节点的文档对象模型(Document Object ...

  3. css考核点整理(十)-响应式开发经验,响应式页面的三种核心技术是什么

    响应式开发经验,响应式页面的三种核心技术是什么

  4. Quartz.NET配置(Log4net)

    最近有个任务关于服务调度,想起以前看过Quartz.NET调度任务非常棒. 今天小试Quartz.NET,前面配置Quartz.NET很轻松,控制台也输出了.但是想配合Log4net来做日志文件,怎么 ...

  5. Android 5.0以上手机出现找不到so文件

    问题描述 最近做项目出了一个bug项目中用到so文件,在5.0以上的手机上会报一个初始化异常错误,并提示找不到so文件.lib里目录结构类似如下  在Android5以下都没有问题,在5.0以上会报错 ...

  6. 关于Android4.x系统默认显示方向各种修改

    1.设置属性值 在device.mk文件中加入PRODUCT_PROPERTY_OVERRIDES += \ ro.sf.hwrotation=180 2.设置屏幕默认显示方向 在frameworks ...

  7. SQL Server Management Studio的对象资源管理器的使用

    1.查看 2.对象资源管理器 3.点到某个表的身上 4.出现以下图片,因为有时动态创建的触发器,刷新表下面的触发器可能不出来,所以来这里面找

  8. For Me ...

    一直有做博客的打算,但是这也看不上,那也看不上. 总想着做一个personal blog,界面,风格全由自己设计. 可时间上总是不充裕的. 可技术上总是欠火候的. 可内容上总是待斟酌的. 于是时间被我 ...

  9. java 对于url地址的实体符号的处理

    <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 <dependency> <g ...

  10. 异步IO简介

    最近想学习一下libevent,就先翻译一下libevent的官方文档吧. 英文原文链接:http://www.wangafu.net/~nickm/libevent-book/01_intro.ht ...