1.客户端调用序列

客户端编程序列如下:

  1. 调用socket函数创建套接字
  2. 调用connect连接服务器端
  3. 调用I/O函数(read/write)与服务器端通讯
  4. 调用close关闭套接字

2.服务器端调用序列

服务端的编程序列如下:

  1. 调用socket函数创建套接字
  2. 调用bind绑定本地地址和端口
  3. 调用listen启动监听
  4. 调用accept从已连接队列中提取客户端连接
  5. 调用I/O函数(read/write)与客户端通讯
  6. 调用close函数关闭套接字

3.常用函数

3.1.套接字与地址绑定函数

(1)绑定地址

#include <sys/socket.h>

int bind(int sockfd, const struct sockaddr *addr, socklen_t len);

返回:成功返回0,出错返回-1

特殊bind地址介绍

一个主机可以有多个网络接口和多个IP地址,如果我们只关心某个地址的连接请求,我们可以指定一个具体的本地IP地址,如果要响应所有接口上的连接请求就要使用一个特殊的地址INADDR_ANY

#define INADDR_ANY (uint32_t)0x00000000

监听所有服务器上IP得到的连接请求

struct sockaddr_in servaddr;

memset(&servaddr, 0, sizeof(servaddr));

servaddr.sin_addr.s_addr = INADDR_ANY;

3.2.查找绑定到套接字的地址

#include <sys/socket.h>

int getsockname(int sockfd, struct sockaddr *restrict_addr, socklen_t *restrict_alenp);

返回:成功返回0,出错返回-1

3.3.获取对方地址

int getpeername(int sockfd, struct sockaddr *restrict_addr, socklen_t *restrict_alenp);

返回:成功返回0,出错返回-1

3.4.服务器端建立连接

#include <sys/socket.h>

int listen(int sockfd, int backlog);

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

backlog指定进行客户端连接排队的队列长度。

int accept(int sockfd, struct sockaddr *restrict_addr, socklen_t *restrict_len);

返回:成功返回一个新的sockfd(客户端的)。

3.5.客户端请求连接

#include <sys/socket.h>

int connect(int sockfd, const struct sockaddr *addr, socklen_t len);

返回:成功返回0,出错返回-1

3.6.IO操作函数

read和write函数默认都是阻塞性的读写函数。此时需要考虑服务器的并发处理。

4.服务器端并发性处理

4.1.多进程模型

弊端:进程占用系统资源,当子进程过多将占用过多的系统资源,难以处理大并发的场景。

4.2.多线程模型

以分离状态去启动子线程,子线程运行完后自动释放空间。

TCP客户端服务器编程模型的更多相关文章

  1. 系统编程-网络-tcp客户端服务器编程模型(续)、连接断开、获取连接状态场景

    相关博文: 系统编程-网络-tcp客户端服务器编程模型.socket.htons.inet_ntop等各API详解.使用telnet测试基本服务器功能 接着该上篇博文,咱们继续,首先,为了内容的完整性 ...

  2. --系统编程-网络-tcp客户端服务器编程模型、socket、htons、inet_ntop等各API详解、使用telnet测试基本服务器功能

    PART1 基础知识 1. 字节序 网络字节序是大端字节序(低地址存放更高位的字节), 所以,对于字节序为小端的机器需要收发网络数据的场景,要对这些数据进行字节序转换. 字节序转换函数,常用的有四个: ...

  3. Linux 下 简单客户端服务器通讯模型(TCP)

    原文:Linux 下 简单客户端服务器通讯模型(TCP) 服务器端:server.c #include<stdio.h> #include<stdlib.h> #include ...

  4. (1)线程的同步机制 (2)网络编程的常识 (3)基于tcp协议的编程模型

    1.线程的同步机制(重点)1.1 基本概念 当多个线程同时访问同一种共享资源时可能会造成数据的覆盖和不一致等问题,此时就需要对线程之间进行协调和通信,该方式就叫线程的同步机制. 如: 2003年左右 ...

  5. (1)基于tcp协议的编程模型 (2)tcp协议和udp协议的比较 (3)基于udp协议的编程模型 (4)反射机制

    1.基于tcp协议的编程模型(重中之重)1.1 编程模型服务器: (1)创建ServerSocket类型的对象,并提供端口号: (2)等待客户端的连接请求,调用accept()方法: (3)使用输入输 ...

  6. (1)网络编程的常识 (2)基于tcp协议的编程模型 (3)tcp协议和udp协议的比较 (4)基于udp协议的编程模型

    1.网络编程的常识 目前主流的网络通讯软件有:微信.QQ.YY.陌陌.探探.飞信.阿里旺旺.... 在吗? 1.1 七层网络模型(熟悉) 为了保证数据传递的可靠安全等等,ISO(国际标准委员会组织)将 ...

  7. python网络编程socketserver模块(实现TCP客户端/服务器)

    摘录python核心编程 socketserver(python3.x版本重新命名)是标准库中的网络编程的高级模块.通过将创建网络客户端和服务器所必须的代码封装起来,简化了模板,为你提供了各种各样的类 ...

  8. 再次回首 TCP Socket服务器编程

    转载:http://www.cnblogs.com/zc22/archive/2010/06/27/1766007.html ------------------ 前言 --------------- ...

  9. 经过一年时间的沉淀 再次回首 TCP Socket服务器编程--转

    ------------------ 前言 ------------------ 开发了这么多年,发现最困难的程序开发就是通讯系统. 其他大部分系统,例如CRM/CMS/权限框架/MIS之类的,无论怎 ...

随机推荐

  1. Linux数据对齐

    编写可移植代码而值得考虑的最后一个问题是如何存取不对齐的数据 -- 例如, 如何读取 一个存储于一个不是 4 字节倍数的地址的 4 字节值. i386 用户常常存取不对齐数据项, 但是不是所有的体系允 ...

  2. SpringBoot优先级

    1.配置文件 application.properties和application.yml文件可以放在以下四个位置: 外置,在相对于应用程序运行目录的/congfig子目录里. 外置,在应用程序运行的 ...

  3. Nutch网页抓取速度优化

    Nutch网页抓取速度优化 Here are the things that could potentially slow down fetching 1) DNS setup 2) The numb ...

  4. Dubbo-本地Bean测试

    Dubbo本地测试API的Bean 一.建立一个测试类文件 二.测试API // 自己要测试的API public static final XxApi xxApi; 三.注入Bean static ...

  5. Elasticsearch介绍和安装

    Elasticsearch介绍和安装 软件包: 链接:https://pan.baidu.com/s/1O_C0JQGfF8sC_OtcCCLNoQ 提取码:3iai 1.1.简介 1.1.1.Ela ...

  6. Visio图表应用

    两种方式创建 插入图表之后通过设计面板的更改图表类型进行更改 双击图表进入编辑状态. 组合其中组合图的利用 下面是图表编辑操作: 双击进入图表之后下方会有“Chart1”跟“Sheet1”两个板块 而 ...

  7. 运行APP脚本的步骤

    1.打开ride(可运行命令:ride.py) 2.启动Appium 3.启动android-sdk\tools\uiantomatorviewer.bat(目的是为了抓取设备元素ID)

  8. 第四阶段:1.从零打造一款社区web产品

    ---恢复内容开始--- 熟人关系:微信 陌生人关系:微博 1.把各种竞品罗列起来形成一个分析池.分析其目标用户是哪些.这些产品满足了用户什么需求.可以从时间角度分析趋势.针对每一类竞品画一个商业模式 ...

  9. Linux忘记root密码后如何在grub界面中以单用户模式进入系统并重置密码的方法

    本文将介绍在Linux系统中忘记root用户密码的情况下,如何在gurb界面进入单用户模式并重置root用户密码.在单用户模式下,用户不需要输入任何密码即可进入系统并可以修改密码.实验步骤如下: 1. ...

  10. MySQL数据库性能优化:表、索引、SQL等

    一.MySQL 数据库性能优化之SQL优化 注:这篇文章是以 MySQL 为背景,很多内容同时适用于其他关系型数据库,需要有一些索引知识为基础 优化目标 减少 IO 次数IO永远是数据库最容易瓶颈的地 ...