socket服务器端编程的基本步骤:

1.1 创建套接字

int socket(int domain,int type,int protocol);
domain--协议族,常用的有AF_INET(基于IPv4的Internet协议),AF_INET6(基于IPv6的Internet协议),AF_LOCAL(Unix本地通信协议)
type--传输类型,常用的有SOCK_STREAM(面向连接的可靠的带连接的传输方式,如TCP)、SOCK_DGRAM(面向消息的不可靠的无连接的传输方式,如UDP)
protocol--指定协议,在前面两个参数确定的情况下,若存在多种协议满足条件,用来指定某个协议,通常为0
返回值--socket文件操作符

1.2 绑定地址信息

int bind(int sockfd,const struct sockaddr* addr,socklen_t* addrlen);
sockfd--服务器的socket操作符
addr--储存地址信息的结构体
addrlen--储存地址信息的结构体的长度
返回值--成功返回0,失败返回-1

1.3 开启监听

int listen(int sockfd,int backlog);
sockfd--服务器端的socket操作符
backlog--可保持的最大连接数
返回值--成功返回0,失败返回-1

1.4 接收连接

该函数为阻塞函数,直到接收到客户端的链接后退出阻塞状态
int accept(int sockfd,struct sockaddr* addr,socklen_t* addrlen);
sockfd--服务器的socket操作符
addr--用来保存客户端地址信息的结构体
addrlen--客户端地址信息结构体的长度

1.5 向客户端socket写数据

ssize_t write(int fd,void* buf,size_t count);
fd--客户端的socket操作符
buf--要写入的字符序列
count--写入的序列的长度
返回值--返回实际写入的长度

1.6 关闭套接字

close(int sockfd)
sockfd--socket标识符

示例代码serv.c:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<arpa/inet.h>
#include<sys/socket.h>
void error_handling(char* message);
int main(int argc,char *argv[])
{int serv_sock;int clnt_sock;struct sockaddr_in serv_addr;struct sockaddr_in clnt_addr;socklen_t clnt_addr_size;char message[]="hello world!";if(argc!=2){printf("Usage : %s <port>\n",argv[0]);exit(1);}serv_sock=socket(PF_INET,SOCK_STREAM,0);//创建socketif(serv_sock==-1)error_handling("sock error");memset(&serv_addr,0,sizeof(serv_addr));serv_addr.sin_family=AF_INET;serv_addr.sin_addr.s_addr=htonl(INADDR_ANY);serv_addr.sin_port=htons(atoi(argv[1]));//绑定地址信息if(bind(serv_sock,(struct sockaddr*)&serv_addr,sizeof(serv_addr))==-1)error_handling("bind error");if(listen(serv_sock,5)==-1)//开启监听error_handling("listen error");clnt_addr_size=sizeof(clnt_addr);//接受链接请求clnt_sock=accept(serv_sock,(struct sockaddr*)&clnt_addr,&clnt_addr_size);if(clnt_sock==-1)error_handling("accept error");write(clnt_sock,message,sizeof(message));close(clnt_sock);close(serv_sock);return 0;
}void error_handling(char* message)
{fputs(message,stderr);fputc('\n',stderr);exit(1);
}

Github位置:

https://github.com/HymanLiuTS/NetDevelopment

克隆本项目:

git clone git@github.com:HymanLiuTS/NetDevelopment.git

获取本文源代码:

git checkout NL01

网络编程(1)—— 基于linux系统的socket服务器端编程步骤相关推荐

  1. 网络编程(3)—— 基于Windows系统的socket服务器端的编程步骤

    socket服务器端编程的基本步骤: 1.1 准备Windows服务器端开发环境 导入ws2_32.lib静态连接库,项目属性->配置属性->链接器->输入->附加依赖项中添加 ...

  2. linux环境下python编程指南,在Linux系统中搭建Python编程环境

    Linux系统是为编程而设计的,因此在大多数Linux计算机中都默认安装了Python. 1. 检查Python版本 在系统中运行应用程序Terminal(如果是Ubuntu,可按Ctrl+Alt+T ...

  3. 怎样实现linux的网络通信协议是,一种基于Linux系统的TCP/IP协议栈的实现

    一种基于Linux系统的TCP/IP协议栈的实现 本文分析了Linux内核TCP/IP协议栈的实现,给出了Linux网络数据处理流程,探讨了Linux的I (本文共3页) 阅读全文>> 介 ...

  4. 基于Linux系统的边界网关协议的设计与实现

    基于Linux系统的边界网关协议的设计与实现 3.6 BGP和RMer系统间通信 RMer系统和BGP系统之间采用的是UNIX本地的服务器客户端模式进行通信,它们创建的socket的地址格式为AF_U ...

  5. ansole终端链接linux,基于Linux系统的智能家居远程控制系统设计论文.doc

    基于Linux系统的智能家居远程控制系统设计论文 学科分类号 0801 北京邮电大学毕业论文 题目 (中文):基于Linux系统的智能家居远程控制系统设计 (英文):The smart home re ...

  6. 阿里云自动java和mysql数据库_阿里云服务器之基于Linux系统部署上线JavaWeb项目和连接MySQL数据库(从购买云服务器到发布JavaWeb项目全套详细流程)...

    阿里云服务器之基于Linux系统部署上线JavaWeb项目和连接MySQL数据库(从购买云服务器到发布JavaWeb项目全套详细流程) (仅此纪念人生第一篇学习博客) 前阵子接了一个小小的JavaWe ...

  7. 编程实现在Linux系统中Intel CPU功耗的获取

    编程实现在Linux系统中Intel CPU功耗的获取 编程实现在Linux系统中Intel CPU功耗的获取 资料的获取 X86 MSR寄存器介绍 X86 CPUID介绍 X86 RAPL介绍 Li ...

  8. linux测试自动化,一种基于Linux系统下自动化测试RoCE性能的方法及系统与流程

    本发明涉及自动化测试的技术领域,特别涉及一种基于Linux系统下自动化测试roce性能的方法及其系统. 背景技术: 现在迅速发展的服务器行业,对网络服务性能提出了越来越高的要求.特别是在互联网行业以及 ...

  9. linux电机驱动程序,基于Linux系统的HHARM9电机驱动程序设计

    电子科学知识.电机,arm 第24卷 第4期 2005年12月南昌工程学院学报JournalofNanchangInstituteofTechnologyVol.24No.4Dec.2005文章编号: ...

  10. 基于linux的游戏论文,基于linux系统的图形单机版农场游戏——毕业论文.doc

    基于linux系统的图形单机版农场游戏--毕业论文 基于linux系统的图形单机版农场游戏 摘要 随着社会的发展,人们的生活越来越丰富多彩,特别是网络的飞速发展,让人们可以在工作之余享受更多的乐趣和缓 ...

最新文章

  1. NSHomeDirectory
  2. 求两个数组的最长重复子数组 Maximum Length of Repeated Subarray
  3. 网关Spring Cloud Gateway科普
  4. 工具栏,底部导航栏,可扩展列表视图
  5. python break跳出外层_失去循环标记的Python,我这样实现跳出外层循环
  6. 如何在一分钟内实现微服务系统下的架构可视化
  7. robotFramework-ride使用1-关键字驱动与数据类型
  8. 感知器原理及线性分类技术实现
  9. Linux学习笔记-使用管道通信实现cat /etc/passwd | grep root这条命令
  10. NTA高性能Flow负载均衡及其应用
  11. LeetCode —— 332. 重新安排行程(Python)
  12. java 连接kafka之坑Connection to node 0 could not be established. Broker may not be available
  13. Android笔记 - android 类型转化错误
  14. 解救电商大促没灵感的设计师|攻略模板奉上
  15. 行业研究 | 语音识别行业发展现状解读
  16. (重点)深入理解Java分布式架构
  17. 工作中如果一直被领导忽略,你会怎么办?
  18. Sentinel限流熔断
  19. firstvalue函数mysql_MySQL 窗口函数之头尾函数
  20. 爬虫路线Requests-Re-BeautifulSoup技术路线总结

热门文章

  1. 简易天线增益测量系统
  2. c语言在线编译答案,(完整版)C语言试题
  3. 北京地铁站经纬度收集
  4. 智能交通——车辆属性识别
  5. 二维傅里叶变换的意义
  6. Linux常用软件包管理器命令
  7. iphone开发每日一练【2011-10-04】
  8. 在网上看到SpiceWorks是一个免费但很强大的HELPDESK系统
  9. logstash 日志收集
  10. 多卡聚合设备 广电视频传输解决方案