套接字

Linux Systemd管理的12种服务单元

孤街浪徒 提交于 2019-11-30 17:07:33
在Linux中,systemd是排名第1的守护进程,它管理着很多服务单元(service unit),运行下面这个命令就能查询得到: # systemd --type help 显示的结果是12种业务单元: service,服务 一个或多个守护进程共同协作,向系统用户提供的一种功能,其名称后通常是.service,如firewalld.service提供的是防火墙服务,其功能包括规则的添加、修改、查询、删除,及使用netfilter来进行数据包过滤等等。这一类业务通常访问量较大,业务频繁。 而守护进程则是在后台运行的程序,一般跟着系统的关停而关停,且多以d为其名称最后一个字母,如firewalld。 systemctl --type=service socket,套接字 它负责一个进程与另一个进程的通信,即IPC - inter-process communication。进程A创建了一个套接字,等着别的进程来通信;进程B去连接那个套接字时,systemd会启动一个守护进程,将套接字提供给进程B。启动时,会有意将套接字的启动过程加以延时。通常套接字的访问不会太频繁。 target, 以.target为后缀的配置文件,负责将一组相关的服务单元组合在一起,以提供某个特定的运行环境。如multi-user.target是一个字符界面的窗口,graphical

Linux C编程

╄→尐↘猪︶ㄣ 提交于 2019-11-30 16:22:58
Linux C网络编程 1.Linux套接字 1.1 套接字介绍 套接字(Sockets),即为网络进程ID,是由运行这个进程的计算机的IP地址和这个进程使用的端口(Port)组成. 可以只用'netstat-all' 查看当前系统中网络应用进程的套接字和端口. 可以使用 > 输出重定向到文件. 1.2 套接字的结构 Linux在头文件<sys/socket.h>中定义了通用的套接字结构类型,可供不同协议调用 struct sockaddr { unsigned short int sa_family; //表示套接字的协议类型,如常见的IPv4,IPv6 unsigned char sa_data[14]; //14个字节的协议地址,包含了IP地址和端口 } 除了sockaddr之外,Linux还在<netinet/in.h>中定义了另外一种结构类型 sockaddr_in ,它和sockaddr等效且可以互相转换.通常用于TCP/IP协议 struct sockaddr_in { int sa_len; //长度单位,通常使用默认值16 short int sa_family; //协议族 unsigned short int sin_port; //端口号 struct in_addr sin_addr; //IP地址 unsigned char sin_zero[8]; /

网络编程基础之TCP编程学习(一)

丶灬走出姿态 提交于 2019-11-30 16:17:49
网络编程基础了解 socket套接字 socket 是一种通讯机制,它包含一整套的调用接口和数据结构的定义,他给应用程序提供了使用如 TCP/UDP 等网络通讯的手段。 linux 中的网络编程通过 socket 接口实现, socket 既是一种特殊的 IO ,提供对应的文件描述符。一个完整的 socket 都有一个相关描述 { 协议,本地地址,本地端口,远程地址,远程端口 }; 每个 socket 有一个本地唯一 Socket ,由操作系统分配。 定位某个计算机用 IP ,定位某个服务用端口。 创建Socket #include <sys/socket.h> int socket(int domain, int type, int protocol); 返回:成功返回描述符,出错返回 -1 ( 详细可以利用 指令 man socket 查看 ) 参数解释 domain    AF_INET    IPv4 因特网域    AF_INET6   IPv6 因特网域    AF_UNIX   unix 域    AF_UNSPEC 未指定 protocol   通常为 0, 表示按给定的域和套接字类型选择默认协议。 type (指定采用何种协议)    SOCK_STREAM   采用 TCP 协议(流式的套接字可以提供可靠的面向连接的通信流)    SOCK_DGRAM   

socket、端口、进程的关系

烂漫一生 提交于 2019-11-30 10:55:41
本文属网络编程部分。 socket的引入是为了解决不同计算机间进程间通信的问题。 端口是TCP/IP协议中的概念,描述的是TCP协议上的对应的应用,可以理解为基于TCP的系统服务,或者说系统进程!如下图,FTP就需要占用特定的TCP端口。 TCP 而 socket 呢,是网络编程中的概念,对TCP/IP协议进行了抽象和实现,并为应用层提供接口。这里的应用A,可以是FTP应用,它属于用户进程,通过socket与内核中的网络协议栈进行交互。 socket socket 是核心,是枢纽,是进程与网络建立关系的必经之路! 1.内核是如何将数据包转发至 socket 的呢? 网络数据首先到达网卡,然后进入内核,由网络协议栈去处理,那么内核是如何进行数据分发的呢?它怎么知道该如何把数据交给特定的用户进程呢? 这时,就需要 socket 发挥作用了! socket 中存储了特定的四元组: 源ip+port,目的ip+port; 1> bind 到特定 ip 和 port 的socket 对应 [src ip, src port) <=> (*, *)] ; 2> connect 到特定目的ip+port 的 socket 对应 [src ip, src port) <=> (dst ip, dst port)]; 3> accept 返回了的 socket 对应 [src ip, src

UDP套接字

[亡魂溺海] 提交于 2019-11-30 09:24:50
一、UDP套接字简单示例 1.1 服务端 import socket server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 数据报协议-》UDP server.bind(('127.0.0.1', 8080)) while True: data, client_addr = server.recvfrom(1024) print('===>', data, client_addr) server.sendto(data.upper(), client_addr) server.close() 二、客户端 import socket client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 数据报协议-》UDP while True: msg = input('>>: ').strip() # msg='' client.sendto(msg.encode('utf-8'), ('127.0.0.1', 8080)) data, server_addr = client.recvfrom(1024) print(data) client.close() UDP是无链接的,先启动哪一端都不会报错 UDP协议是数据报协议,发空的时候也会自带报头,因此客户端输入空

网络(socket)编程

余生长醉 提交于 2019-11-30 08:04:06
一、网络协议 客户端/服务器架构 1.硬件C/S架构(打印机) 2.软件C/S架构(互联网中处处是C/S架构):B/S架构也是C/S架构的一种,B/S是浏览器/服务器 C/S架构与socket的关系:我们用socket就是为了完成C/S架构的开发 osi七层 引子: 须知一个完整的计算机系统是由硬件、操作系统、应用软件三者组成,具备了这三个条件,一台计算机系统就可以自己跟自己玩了(打个单机游戏,玩个扫雷啥的) 如果你要跟别人一起玩,那你就需要上网了,什么是互联网? 互联网的核心就是由一堆协议组成,协议就是标准,比如全世界人通信的标准是英语 如果把计算机比作人,互联网协议就是计算机界的英语。所有的计算机都学会了互联网协议,那所有的计算机都就可以按照统一的标准去收发信息从而完成通信了。 人们按照分工不同把互联网协议从逻辑上划分了层级, 详见网络通信原理:http://www.cnblogs.com/linhaifeng/articles/5937962.html 为何学习socket一定要先学习互联网协议?   首先C/S架构是基于网络通信的   然后网络的核心即一堆网络协议,也就是协议标准。如果你想开发一款基于网络通信的软件,就必须遵循这些标准 socke层 二、socket是什么? socket是应用层与TCP/IP协议通信的中间软件抽象层,它是一组接口。在设计模式中

聊聊JAVA网络编程

江枫思渺然 提交于 2019-11-29 23:41:39
什么是网络编程 敲黑板,划重点 :网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来。 说白了,网络编程要涉及以下几点: 1. 串口交互 2. 网络传输协议 3. IO传输流 。 也就是说,要想掌握网络编程,就必须对这三个包非常的熟练 。 java.net包中J2SE的API包含有类和接口,它们提供低层次的通信细节。你可以直接使用这些类和接口,来专注于解决问题,而不用关注通信细节。 java.net包中提供了两种常见的网络协议的支持: TCP : TCP是传输控制协议的缩写,它保障了两个应用程序之间的可靠通信。通常用于互联网协议,被称TCP / IP。 UDP :UDP是用户数据报协议的缩写,一个无连接的协议。提供了应用程序之间要发送的数据的数据包。 这两个网络协议也是常见的问题,一看一下我这篇博客总结的网络协议常考的问题以及他们两个的特点。 本文主要讲解以下两个主题。 Socket 编程 : 这是使用最广泛的网络概念,它已被解释地非常详细 URL 处理 : 这部分会在另外的篇幅里讲,点击这里更详细地了解在 Java语言中的URL处理 。 Socket编程 : 套接字使用TCP提供了两台计算机之间的通信机制。 客户端程序创建一个套接字,并尝试连接服务器的套接字。 当连接建立时, 服务器会创建一个Socket对象 。

Linux 进程间通讯(IPC)详细总结 6本地套接字。

泄露秘密 提交于 2019-11-29 22:20:54
6本地套接字 1)套接字可用于一个进程和其他进程互通信息.即可以实现本地计算机通信,也可以用于网络通信. 2)套接字不同与管道,即它们是双向通信. 3)创建通用套接字的系统调用是socket函数,该函数创建的套接字可以用于本地或网络连接. 套接字定义: 需要的头文件: #include<sys/types.h> #include<sys/socket.h> #include<sys/un.h> #include<stdio.h> #include<unistd.h> 对于本地套接字来说,流式套接字(SOCK_STREAM)是一个有顺序的、可靠的双向字节流,相当于在本地进程之间建立起一条数据通道;数据报式套接字(SOCK_DGRAM)相当于单纯的发送消息,在进程通信过程中,理论上可能会有信息丢失、复制或者不按先后次序到达的情况,但由于其在本地通信,不通过外界网络,这些情况出现的概率很小。 1,int socket(int domain, int type, int protocol); 其中,domain参数指定协议族,对于本地套接字来说,其值须被置为AF_UNIX枚举值;type参数指定套接字类型,protocol参数指定具体协议;type参数可被设置为SOCK_STREAM(流式套接字)或SOCK_DGRAM(数据报式套接字),protocol字段应被设置为0

java.net.SocketException: socket closed

旧街凉风 提交于 2019-11-29 22:15:39
在使用socket编程的时候,发现当使用完getInputStream方法后,再获取OutputStream就会报 java.net.SocketException: socket closed 错误 看到JAVA api中写到 java.net.Socket.getInputStream方法: getInputStream public InputStream getInputStream()throws IOException 返回此套接字的输入流。 如果此套接字具有关联的通道,则所得的输入流会将其所有操作委托给通道。如果通道为非阻塞模式,则输入流的 read 操作将抛出IllegalBlockingModeException。 在非正常条件下,底层连接可能被远程主机或网络软件中断(例如,TCP 连接情况下的连接重置)。当网络软件检测到中断的连接时,将对返回的输入流应用以下操作: 网络软件可能丢弃经过套接字缓冲的字节。网络软件没有丢弃的字节可以使用 read 读取。 如果没有任何字节在套接字上缓冲,或者 read 已经消耗了所有缓冲的字节,则对 read 的所有后续调用都将抛出 IOException。 如果没有任何字节在套接字上缓冲,并且没有使用 close 关闭套接字,则 available 将返回 0。 关闭返回的 InputStream 将关闭关联套接字。 返回:

专题 17 SOCKET并发程序设计

独自空忆成欢 提交于 2019-11-29 21:40:17
非阻塞并发模型 函数 fcntl 设置套接字描述符的 O_NONBLOCK 标志后,即可将 I/O 方式更改为非阻塞方式。此时函数 read,recv,recvfrom,write, send 以及 accept 在调用不成功后立即返回。 设置套接字描述符 nSock 设置为非阻塞方式: int nType; nType = fcntl(nSock, F_GETFL, 0); fcntl(nSock, F_SETFL,nType | O_NONBLOCK); 设置阻塞套接字程序设计的基本流程: 非阻塞套接字的程序一般包含一段循环代码,在循环代码中采用轮询的方式,分别调用套接字的输入、输出、申请连接或连接处理函数,从而达到并发处理多个套接字的目的。 /**************************************************************************/ /********************套接字的非阻塞并发实例********************************/ /**************************************************************************/ //定义设置非阻塞模式宏 #define Fsetnonblock(a) \ {\ nType =