写server的一些流程总结

一、向内核申请一个socket

TCP形式

  1. sock_fd = socket(AF_INET, SOCK_STREAM, );

UDP形式

  1. sfd = socket(AF_UNIX, SOCK_STREAM, );

二、使用bind

网络中的地址包括3个方面:1.地址类型 2.IP地址 3.端口

  1. include <netinet/in.h>
  2.  
  3. struct sockaddr {
  4. unsigned short sa_family; // 2 bytes address family, AF_xxx
  5. char sa_data[]; // 14 bytes of protocol address
  6. };
  7.  
  8. // IPv4 AF_INET sockets:
  9.  
  10. struct sockaddr_in {
  11. short sin_family; // 2 bytes e.g. AF_INET, AF_INET6
  12. unsigned short sin_port; // 2 bytes e.g. htons(3490)
  13. struct in_addr sin_addr; // 4 bytes see struct in_addr, below
  14. char sin_zero[]; // 8 bytes zero this if you want to
  15. };
  16.  
  17. struct in_addr {
  18. unsigned long s_addr; // 4 bytes load with inet_pton()
  19. };

所以使用bind前要先设置参数:

1.清空的写法:

  1. struct sockaddr_in servaddr = {};
  2. memset(&servaddr , , sizeof(struct sockaddr_un));
  3. bzero(&servaddr, sizeof(struct sockaddr_in));

2.设置初值:

  1. servaddr.sin_family = AF_INET;
  2. servaddr.sin_port = htons(SERV_PORT);
  3. /* 设置sin_addr的方式又有不少 */
  4. servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
  5. servaddr.sin_addr.s_addr = inet_addr("192.168.0.1");

3.运行bind,会把sockaddr_in强制转换成sockaddr

  1. bind(sfd, (struct sockaddr *) &my_addr, sizeof(struct sockaddr_in))

三、listen函数

  1. listen(sock_fd, );

第二个参数是:等待连接队列的最大长度

四、accept函数

  1. sock_fd = accept(sock_id, NULL, NULL);

第二个和第三个参数与bind类似,不过是客户端的传过来的信息。

accept会返回一个成功连接的socket描述符

对这个返回的描述符写,就是发送数据了

linux IPC socket(3)server简单写法的更多相关文章

  1. linux IPC socket(2)

    使用bind来关联地址和套接字 #include <sys/types.h> #include <sys/socket.h> int bind(int sockfd, cons ...

  2. Linux IPC socket 广播,组播

    getsockopt()/setsockopt() //获得sockfd指向的socket的属性 int getsockopt(int sockfd, int level, int optname, ...

  3. Linux IPC socket编程基础

    头文件 #include<unistd.h> #include <sys/types.h> #include <sys/socket.h> #include< ...

  4. linux IPC socket

    套接字是通讯端点的抽象 创建一个套接字 #include <sys/types.h> #include <sys/socket.h> int socket(int domain ...

  5. [转载]socket下server端支持多客户端并发访问简单实现

    /*Author: wainiwann *Source: 博客园 http://www.cnblogs.com/wainiwann *Remarks:  转载请说明出处!!! */ 感觉很不错,可以学 ...

  6. Socket TCP Server一个端口可以有多少个长连接?受到什么影响?linux最大文件句柄数量总结

    Socket TCP Server一个端口可以有多少个长连接? 网上答案很多,不知道那个才是正确的 理论上是无限的 16.Linux中,一个端口能够接受tcp链接数量的理论上限是? A.1024 B. ...

  7. Linux C Socket编程原理及简单实例

    部分转自:http://goodcandle.cnblogs.com/archive/2005/12/10/294652.aspx 1.   什么是TCP/IP.UDP? 2.   Socket在哪里 ...

  8. Linux线程池在server上简单应用

    一.问题描写叙述 如今以C/S架构为例.client向server端发送要查找的数字,server端启动线程中的线程进行对应的查询.将查询结果显示出来. 二.实现方案 1. 整个project以cli ...

  9. linux系统socket通信编程详解函数

    linux socket编程之TCP与UDP   TCP与UDP区别 TCP---传输控制协议,提供的是面向连接.可靠的字节流服务.当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之 ...

随机推荐

  1. Ubuntu Visual code安装与使用

    1.直接启动软件中心,输入visual studio code,点击install即可,千万千万不要去装逼搞什么linux指令安装,死都不知道怎么死的 2.Visual code是以文件夹为工程目录的 ...

  2. STM32输入捕获TIM2四通道

    相比于一通道,原子的例程里因为清了计数时间,所以要对程序进行修改. 记录上升沿后的计数,然后记录下降沿的计数.相减后计算高电平时间,对于定时器中断间隔的边界要分开处理. 这里因为我的接收机时间是1ms ...

  3. 【BZOJ1396】识别子串(后缀自动机,线段树)

    题意: 一行,一个由小写字母组成的字符串S,长度不超过10^5 思路:论文题 设p为自动机上的合法结点,r为右端点,len=st[fa[p]]]+1 位置[r-st[p]+1,r-len+1]与r-i ...

  4. python中的open()函数

    定义: python open() 函数用于打开一个文件,创建一个 file 对象,相关的方法才可以调用它进行读写 参数: 模式 描述 r 以只读方式打开文件.文件的指针将会放在文件的开头.这是默认模 ...

  5. python 中的__str__ 和__repr__方法

    看下面的例子就明白了 class Test(object): def __init__(self, value='hello, world!'): self.data = value >> ...

  6. Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) 解决方法

    可以通过如下命令来解决,具体就是先关闭服务器,然后再重启服务器: cd /etc/init.d sudo service mysql stop sudo service mysql start

  7. nRF51822 之 Interrupt

    nRF51822的中断使用在官方的例程中好像没有!

  8. Windows-计划任务-自动备份数据库和文件

    开始 -> 程序 -> 附件 -> 系统工具 -> 计划任务 .bat 文件如下: ::数据库+文件备份 @echo off ::日期时间 set yyyymmdd=%date ...

  9. Python 进阶_闭包 & 装饰器

    目录 目录 闭包 函数的实质和属性 闭包有什么好处 小结 装饰器 更加深入的看看装饰器的执行过程 带参数的装饰器 装饰器的叠加 小结 装饰器能解决什么问题 小结 闭包 Closure: 如果内层函数引 ...

  10. iview+vue 使用中遇到的问题(分页)

    1.分页默认页数 当页面只有一个功能需要分页组件时,引用iview分页组件当然没问题.当一个页面中有多个需要分页组件的时候,便容易出现问题.例如:在项目中有多个不同的表格需要分页功能,几个表格共用一个 ...