linux IPC socket(3)server简单写法
写server的一些流程总结
一、向内核申请一个socket
TCP形式
sock_fd = socket(AF_INET, SOCK_STREAM, );
UDP形式
sfd = socket(AF_UNIX, SOCK_STREAM, );
二、使用bind
网络中的地址包括3个方面:1.地址类型 2.IP地址 3.端口
include <netinet/in.h> struct sockaddr {
unsigned short sa_family; // 2 bytes address family, AF_xxx
char sa_data[]; // 14 bytes of protocol address
}; // IPv4 AF_INET sockets: struct sockaddr_in {
short sin_family; // 2 bytes e.g. AF_INET, AF_INET6
unsigned short sin_port; // 2 bytes e.g. htons(3490)
struct in_addr sin_addr; // 4 bytes see struct in_addr, below
char sin_zero[]; // 8 bytes zero this if you want to
}; struct in_addr {
unsigned long s_addr; // 4 bytes load with inet_pton()
};
所以使用bind前要先设置参数:
1.清空的写法:
struct sockaddr_in servaddr = {};
memset(&servaddr , , sizeof(struct sockaddr_un));
bzero(&servaddr, sizeof(struct sockaddr_in));
2.设置初值:
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(SERV_PORT);
/* 设置sin_addr的方式又有不少 */
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_addr.s_addr = inet_addr("192.168.0.1");
3.运行bind,会把sockaddr_in强制转换成sockaddr
bind(sfd, (struct sockaddr *) &my_addr, sizeof(struct sockaddr_in))
三、listen函数
listen(sock_fd, );
第二个参数是:等待连接队列的最大长度
四、accept函数
sock_fd = accept(sock_id, NULL, NULL);
第二个和第三个参数与bind类似,不过是客户端的传过来的信息。
accept会返回一个成功连接的socket描述符
对这个返回的描述符写,就是发送数据了
linux IPC socket(3)server简单写法的更多相关文章
- linux IPC socket(2)
使用bind来关联地址和套接字 #include <sys/types.h> #include <sys/socket.h> int bind(int sockfd, cons ...
- Linux IPC socket 广播,组播
getsockopt()/setsockopt() //获得sockfd指向的socket的属性 int getsockopt(int sockfd, int level, int optname, ...
- Linux IPC socket编程基础
头文件 #include<unistd.h> #include <sys/types.h> #include <sys/socket.h> #include< ...
- linux IPC socket
套接字是通讯端点的抽象 创建一个套接字 #include <sys/types.h> #include <sys/socket.h> int socket(int domain ...
- [转载]socket下server端支持多客户端并发访问简单实现
/*Author: wainiwann *Source: 博客园 http://www.cnblogs.com/wainiwann *Remarks: 转载请说明出处!!! */ 感觉很不错,可以学 ...
- Socket TCP Server一个端口可以有多少个长连接?受到什么影响?linux最大文件句柄数量总结
Socket TCP Server一个端口可以有多少个长连接? 网上答案很多,不知道那个才是正确的 理论上是无限的 16.Linux中,一个端口能够接受tcp链接数量的理论上限是? A.1024 B. ...
- Linux C Socket编程原理及简单实例
部分转自:http://goodcandle.cnblogs.com/archive/2005/12/10/294652.aspx 1. 什么是TCP/IP.UDP? 2. Socket在哪里 ...
- Linux线程池在server上简单应用
一.问题描写叙述 如今以C/S架构为例.client向server端发送要查找的数字,server端启动线程中的线程进行对应的查询.将查询结果显示出来. 二.实现方案 1. 整个project以cli ...
- linux系统socket通信编程详解函数
linux socket编程之TCP与UDP TCP与UDP区别 TCP---传输控制协议,提供的是面向连接.可靠的字节流服务.当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之 ...
随机推荐
- 多线程模拟生产者消费者示例之BlockQueue
public class Test { public static void main(String[] args){ //创建一个阻塞队列,边界为1 BlockingQueue<String& ...
- Java常用数据结构Set, Map, List
1. Set Set相对于List.Map是最简单的一种集合.集合中的对象不按特定的方式排序,并且没有重复对象. 特点: 它不允许出现重复元素: 不保证和政集合中元素的顺序 允许包含值为null的元素 ...
- SQLmap注入
一.安装 先安装Python2.7 下载SQLmap:http://sqlmap.org/ 下载文件解压到Python文件目录下 然后设置环境变量:D:\Python27\sqlmap 在cmd查看是 ...
- 20 October in ss
Contest A: sum 快速读. B: 鬼谷子的钱袋(coin) 贪心. 按照类似二进制的方式准备钱袋:1, 2, 4, 8, ... 以此装入的钱袋数目记为 \(N\). 如果最后剩余不足以凑 ...
- R 数据分析
目录: windows命令行中执行R dataframe 常用函数.变量 1.windows命令行中执行R 前提:已经把R的命令目录加入了系统路径中. 在windows中,命令行执行R可以用以下两种方 ...
- spring事务传播行为讲解转载
https://segmentfault.com/a/1190000013341344 前言 Spring在TransactionDefinition接口中规定了7种类型的事务传播行为.事务传播行为是 ...
- CentOS 7在VMware 12中共享文件看不见的问题?
前言 由于rhel 7.2因为没有注册导致yum无法使用,包括自己配置本地源,这个命令在你没有注册都不能使用,每次使用rpm去装软件,自己去找缺少的依赖包,实在是麻烦.于是不如就换一个系统,CentO ...
- spring controller使用了@ResponseBody却返回xml
使用ajax请求数据 $.ajax({ url:message.rootPath +"/sendMessage.xhtml", type:"post", dat ...
- git---从已有分支拉出新分支
文章目录 开发中,经常需要从一个已有的分支拉出一个新分支,去这个新分支做一些开发改动,这里示例为: 从master分支,重新拉取出一个新的分支,名字为dev,具体命令如下: 切换到被copy的分支(m ...
- Linux操作系统(一)_常用命令
1.系统工作命令 date 显示/设置系统时间或日期 date:显示时间 date -s “20190319 11:35:56”:设置时间 clock 显示设置硬件时钟 clock -s:以硬件时 ...