创建一个简单服务器用到的基本函数

一,socket()
头文件:#include <sys/socket.h>
函数原型:int socket(int domain, int type, int protocol);
作用:创建套接字。

参数domain:指定使用何种的地址类型。默认AF_INET。
eg:
AF_INET IPv4网络通信
AF_INET6 IPv6网络通信
AF_PACKET 链路层通信
AF_UNIX, AF_LOCAL 本地通信

参数type:套接字类型。默认SOCK_STREAM。
eg:
1、SOCK_STREAM 提供双向连续且可信赖的数据流, 即TCP. 支持 OOB 机制, 在所有数据传送前必须使用connect()来建立连线状态
2、SOCK_DGRAM 使用不连续不可信赖的数据包连接,基于UDP
3、SOCK_SEQPACKET 提供连续可信赖的数据包连接
4、SOCK_RAW 提供原始网络协议存取
5、SOCK_RDM 提供可信赖的数据包连接
6、SOCK_PACKET 提供和网络驱动程序直接通信. protocol 用来指定socket 所使用的传输协议编号, 通常此参考不用管它, 设为0 即可

参数protocol:协议号。可设置为0,表示选择当前family和type组合下protocol的系统默认值
eg:
IPPROTO_TCP IPPTOTO_UDP IPPROTO_SCTP IPPROTO_TIPCTCP
TCP传输协议 UDP传输协议 STCP传输协议 TIPC传输协议

二,bind()
头文件:#include<sys/socket.h>
函数原型:int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
作用:把一个地址族中的特定地址赋给socket。

参数sockfd:即socket描述字,它是通过socket()函数创建了,唯一标识一个socket。bind()函数就是将给这个描述字绑定一个名字。

参数addr:一个const struct sockaddr *指针,指向要绑定给sockfd的协议地址。这个地址结构根据地址创建socket时的地址协议族的不同而不同。
IPV4:
struct in_addr

{

uint32_t s_addr; /* 32位IPv4地址 */
};

struct sockaddr_in
{
sa_family_t sin_family; /* //地址族 */

in_port_t sin_port; /* 16位TCP/UDP端口号 */
struct in_addr sin_addr; /* 32位IP地址 */

};

参数addrlen:该地址结构的长度。

三,listen()
头文件:#include<sys/socket.h>
函数原型:int listen(int sockfd, int backlog);
作用:如果作为一个服务器,在调用socket()、bind()之后就会调用listen()来监听这个socket,如果客户端这时调用connect()发出连接请求,服务器端就会接收到这个请求。

参数sockfd:即为要监听的socket描述字

参数backlog:相应socket可以排队的最大连接个数。

四,connect()
头文件:#include<sys/socket.h>
函数原型:int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
作用:将套接字连接到目的地址,客户端通过调用connect函数来建立与TCP服务器的连接。

参数sockfd:为客户端的socket描述字

参数addr:为服务器的socket地址

参数addrlen:为socket地址的长度

五,accept()
头文件:#include<sys/socket.h>
函数原型:int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen); //返回连接connect_fd
作用:TCP服务器端依次调用socket()、bind()、listen()之后,就会监听指定的socket地址了。TCP客户端依次调用socket()、connect()之后就向TCP服务器发送了一个连接请求。TCP服务器监听到这个请求之后,就会调用accept()函数取接收请求,这样连接就建立好了。之后就可以开始网络I/O操作了,即类同于普通文件的读写I/O操作。
关键点
*accept()会创建一个新的socket,并且正是这个新的socket会与执行connect()的对象socket进行连接。
返回值:accept()的返回结果是已经连接的socket文件描述符

六,close()
头文件:#include <unistd.h>
函数原型:int close(int fd);
作用:在服务器与客户端建立连接之后,会进行一些读写操作,完成了读写操作就要关闭相应的socket描述字

原文地址:https://www.cnblogs.com/yxbl/p/12078538.html

时间: 2024-10-16 22:39:18

创建一个简单服务器用到的基本函数的相关文章

创建一个简单的 MDM 服务器(2)

四.实现 server URL 接下来以推送最简单的锁屏命令为例,演示如何实现从服务器推送完整的 MDM 消息给注册设备. 首先实现一个简单的Jsp 页面.页面中是一个 html 表单,在<select>标签中我们会列出所有注册设备的 UUID(当然列出设备名称会更好),当你选择一个UUID,点击submit 按钮,服务器会向这个设备推送锁屏命令. servlet lock 来负责处理这个表单: Stringudid=request.getParameter("select1&quo

创建一个简单的 MDM 服务器(1)

前提:已获得 APNS 证书 ,已完成 MDM 配置描述文件的制作.请参考< MDM 证书申请流程 >一文和<配置MDM Provisioning Profile>. 环境:OSX 10.9.2,JDK 1.6,Eclipse JavaEE Helois,Tomcat 7.0 一.前言 <THE IOS MDMPROTOCOL>(即Inside Apple MDM)一文中描述了一个简单 MDM Server Python 实现(server.py).笔者也曾参照此文配置

利用node的http模块创建一个简单的http服务器

成功搭建node环境后,利用node.js的http请求创建一个简单的HTTP服务器. 1.在你的项目的文件夹创建一个app文件,同时在文件夹app中创建app.js的node.JS文件.用任意编辑器都可以 2.在终端打开node app.js 指令,输入正确后悔看到屏幕上面输出信息:Server running at http://127.0.0.1:1337,表明已经成功启用本地的1337的接口http服务器 3.打开任意的浏览器,输入server服务器地址:http://127.0.0.1

IntelliJ IDEA 15 部署Tomcat及创建一个简单的Web工程

一.部署Tomcat 二.创建一个简单的Web工程 2.1创建一个新工程 创建一个新工程 设置JDK及选择Web Application (创建的是Web工程) 点击Next,选择工作空间,起个工程名 2.2项目部署 在工具栏点击 Project: 无需任何设置,选择默认编译目录(或自定义编译目录) Modules: 将Tomcat加入 Libraries:无需任何设置.这里描述了此项目的依赖. Facets: 无需任何设置.这里描述了此项目所适配的服务框架 Artifacts: 无需任何配置.

使用 CodeIgniter 创建一个简单的 Web 站点

原文:使用 CodeIgniter 创建一个简单的 Web 站点 参考源自: http://www.ibm.com/developerworks/cn/web/wa-codeigniter/index.html 我的第一个 CodeIgniter 项目(除HelloWorld外),现整理记录下来. 相关环境: 系统:ubuntu-10.04.3 Apache:httpd-2.4.7 PHP:php-5.4.22 MySQL:mysql-5.6.16 CI:CodeIgniter-2.2.0 目标

CodeIgniter框架——创建一个简单的Web站点

目标 使用 CodeIgniter 创建一个简单的 Web 站点.该站点将有一个主页,显示一些宣传文本和一个表单,该表单将发布到数据库表中. 按照 CodeIgniter 的术语,可将这些需求转换为以下内容: 一个控制器,仅包含少数功能(可使用默认的 Welcome 控制器) 一个模型(以及一个数据库表),用于存储联系人信息 一个主视图,包含一些支持 NO1.创建数据库表和模型 从模型入手可帮助理解底层数据库表,之后再开始布设功能和 UI.如果对表将存储哪些内容认识不深,设计与表交互的表单将十分

用 Eclipse 创建一个简单的web项目

Eclipse neon 汉化版 ; 1;右击新建 -->  选择 动态Web项目 2:  填写 项目名 项目位置 ; 选择 Dynamic web module version 和 tomcat version ; 点击完成 即可创建 项目; 2.1:项目名称; 2.2:项目位置; 2.3: Dynamic Web Module Version  和 Tomacat  Version  之间有版本上的匹配关系: 匹配关系如下图 3: 创建成功后的项目结构: 4: 在创建好项目结构之后 先查看一

Django入门第一步(安装和创建一个简单的项目)

目录 Django入门第一步(安装和创建一个简单的项目) 一. Django项目目录结构 二.注意事项 三.Django安装 3.1.安装命令 3.2.验证django是否安装成功 3.3.使用方法 Django入门第一步(安装和创建一个简单的项目) 在使用Django框架开发web应用程序时,开发阶段同样依赖wsgiref模块来实现Server的功能,我们使用Django框架是为了快速地开发application. 如果使用的是我们自定义的框架来开发web应用,需要事先生成框架包含的一系列基础

mysql 如何创建一个简单的存储过程

1 用mysql客户端登入2 选择数据库 mysql>use test3 查询当前数据库有哪些存储过程 mysql>show procedure status where Db='test'4 创建一个简单的存储过程 mysql>create procedure hi() select 'hello'; 5 存储过程创建完毕,看怎么调用它 mysql>call hi();显示结果 mysql> call hi(); +-------+ | hello | +-------+