套接字

自学之路day03---qt小项目

陌路散爱 提交于 2020-03-10 00:30:01
四、网络聊天室 原理:基于tcp协议的网络聊天室,实现服务器端和客户端之间的通信。 需求:利用tcpSocket套接字实现服务器和客户端的通信。 如何实现通讯? 服务器: 一、头文件 服务器界面(利用qtcreator画出来),如图所示: 在头文件中声明套接字,服务器端口,已经保存通信套接字的容器 QTcpServer tcpServer;//TCP服务器 quint16 port;//服务器端口 //列表容器:保存和客户端通信的套接字 QList<QTcpSocket*> tcpClientList; 增加以下槽函数: ① 、void onNetConnect():用于响应客户端的连接请求 ② 、void onReadyRead :用于接收聊天消息的槽函数 ③ 、创建服务器按钮的槽函数; ④ 、成员函数SendMessage(); 二、函数的编写 1.构造函数 建立newConnect和onNetConnect槽函数的连接—当有客户端发送连接请求时,tcpServer会发送信号newConnect { ui - > setupUi ( this ) ; //当有客户端发送连接请求时,tcpServer发送信号newConnection connect ( & tcpServer , SIGNAL ( newConnection ( ) ) , this , SLOT (

[redis] 事件

百般思念 提交于 2020-03-09 08:41:12
文件事件 说明 Redis 服务器通过套接字 Socket 与客户端或其它 Redis 服务器进行连接,文件时间就是服务器对套接字操作的抽象。 套接字变为可应答(acceptable)、可写(writable)、可读(readable) 时,会产生相应的文件事件,服务器通过监听并处理这些事件来完成一系列网络通信操作。 文件事件分为 AE_READABLE 事件(读事件)和 AE_WRITABLE事件(写事件)两类。 文件事件处理器 Redis 基于 Reactor 模式开发了自己的网络事件处理器,处理器使用 I/O 多路复用程序来监听多个套接字,并将其关联到不同的事件处理器 类型 1.连接应答处理器:对连接服务器的各个客户端进行应答;networking.c/acceptTcpHandler 2. 命令请求处理器:接收客户端传来的命令请求; networking.c/readQuertFormClient 3. 命令回复处理器:向客户端返回命令执行结果; networking.c/sendReplayToClient 4. 复制功能处理器:主服务器和从服务器进行复制操作; 时间事件 说明 Redis 服务器中的一些操作,需要在给定的时间点执行,时间事件就是这一类定时操作的抽象。 时间事件分为定时事件(只在指定时间到达一次)、周期性事件(每个一段时间到达一次)两类。 一般只执行

基于UDP的服务器端和客户端

六眼飞鱼酱① 提交于 2020-03-08 20:55:13
UDP中的服务器端和客户端没有连接 UDP 不像 TCP,无需在连接状态下交换数据,因此基于 UDP 的服务器端和客户端也无需经过连接过程。也就是说,不必调用 listen() 和 accept() 函数。UDP 中只有创建套接字的过程和数据交换的过程。 UDP服务器端和客户端均只需1个套接字 TCP 中,套接字是一对一的关系。如要向 10 个客户端提供服务,那么除了负责监听的套接字外,还需要创建 10 套接字。但在 UDP 中,不管是服务器端还是客户端都只需要 1 个套接字。之前解释 UDP 原理的时候举了邮寄包裹的例子,负责邮寄包裹的快递公司可以比喻为 UDP 套接字,只要有 1 个快递公司,就可以通过它向任意地址邮寄包裹。同样,只需 1 个 UDP 套接字就可以向任意主机传送数据。 基于UDP的接收和发送函数 创建好 TCP 套接字后,传输数据时无需再添加地址信息,因为 TCP 套接字将保持与对方套接字的连接。换言之,TCP 套接字知道目标地址信息。但 UDP 套接字不会保持连接状态,每次传输数据都要添加目标地址信息,这相当于在邮寄包裹前填写收件人地址。 发送数据使用 sendto() 函数: ssize_t sendto(int sock, void *buf, size_t nbytes, int flags, struct sockaddr *to, socklen_t

Java语言程序设计-第10版notes

半城伤御伤魂 提交于 2020-03-07 16:59:59
第1章 计算机、程序和Java概述 部分章节小结 1、编程错误可以分为三类:语法错误、运行时错误和逻辑错误。编译器报告的错误称为语法错误或者编译错误;运行时错误指引起程序非正常结束的错误;而当一个程序没有按照预期的方式执行时,产生逻辑错误 。 第2章 基本程序设计 部分章节小结 1、拓宽类型不需要显式转换,缩窄类型必须显式完成。 123456 int i=9;double d=i;//缩窄类型转换double d=9.0;int i=(int)d; 2、计算机科学中,1970年1月1日午夜零点为UNIX时间戳。 第3章 选择 部分章节小结 1、除开赋值操作符的所有二元操作符都是左结合的,赋值操作符是右结合的。(此处的结合指的是结合律) 123456 //以下两个表达等价a-b+c-d((a-b)+c)-d//以下两个表达等价a=b+=c=5a=(b+=(c=5)) 第4章 数学函数、字符和字符串 部分章节小结 1、字符 ‘ ‘ 、t、 f、 r 和 n 都称为空白字符。 2、字符可以基于它们的Unicode码使用关系操作符进行比较。 第6章 方法 部分章节小结 1、程序模块化和可重用性是软件工程的中心目标之一。 2、方法可以重载,这意味着两个方法可以拥有相同的方法名,只要它们的参数列表不同即可。 3、方法抽象是把方法的应用和实现分离,用户可以在不知道方法是如何实现的情况下使用方法

python之socket编程(一)

元气小坏坏 提交于 2020-03-07 12:50:23
socket之前我们先来熟悉回忆几个知识点。 OSI七层模型 OSI(Open System Interconnection)参考模型是国际标准化组织(ISO)制定的一个用于计算机或通信系统间互联的标准体系,一般称为OSI参考模型或七层模型。它是一个七层的、抽象的模型,不仅包括一系列抽象的术语或概念,也包括具体的协议。(from百度) TCP/IP四层参考模型 由于OSI七层较为庞大,所以由技术人员自己开发的TCP/IP协议栈获得了更为广泛的应用。 以下图片TCP/IP四层与OSI七层的区别,是百度上找的图片,大家迁就看: 他们的对应网络协议如下: 今天我们说的socket就在传输层。 TCP/IP三次握手建立连接 TCP/IP四次挥手关闭连接 接着我们来看下在TCP/IP四层中数据之间的一些关系吧: TCP/IP解释 Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议,定义了电子设备如何连入因特网,以及数据如何在它们之间 传输的标准。 python中socket编程 上面一balabala一堆废话,无非想引出来socket这个东西,那么这个socket是个什么鬼呢?socket是TCP/IP中传输层中TCP、UDP的实现方式,用socket编程,可以实现TCP UDP的通信

socket编程基础

断了今生、忘了曾经 提交于 2020-03-07 12:48:06
socket编程 什么是socket 定义 socket通常也称作 套接字 ,用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过 套接字 向网络发出请求或者应答网络请求。 socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,对于文件用【打开】【读写】【关闭】模式来操作。socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭) socket和file的区别: file模块是针对某个指定文件进行【打开】【读写】【关闭】 socket模块是针对 服务器端 和 客户端Socket 进行【打开】【读写】【关闭】 python相关 Python 提供了两个基本的 socket 模块。py2位大写,py3全部小写 第一个是 Socket,它提供了标准的 BSD Sockets API。 第二个是 SocketServer, 它提供了服务器中心类,可以简化网络服务器的开发 socket编程实现 流程图:  说明: 服务端 1.服务端需要导入socket模块,并创建套接字(实例化为一个对象) import socket s = socket.socket() 2.绑定套接字s到本地IP和端口 ip_port = ('127.0.0.1',8080) s.bind(ip_port) 3

python学习笔记10 ----网络编程

感情迁移 提交于 2020-03-07 12:47:29
网络编程 网络编程需要知道的概念 网络体系结构就是使用这些用不同媒介连接起来的不同设备和网络系统在不同的应用环境下实现互操作性,并满足各种业务需求的一种粘合剂。网络体系结构解决互质性问题彩是分层方法。 1. 网络(OSI)的7层模型: 应用层--->为应用程序提供网络通信服务 表示层--->数据表示 会话层--->主机间通信(两个应用进程间) 传输层--->端到端的连接,隔离网络的上下层协议,使得网络应用与下层协议无关 网络层--->寻找最优路径,转发数据包 数据链路层--->无差错的链路连接 物理层--->二进制传输 2. 端口   是一种抽象的软件结构,包括一些数据结构和I/O缓冲区。与协议有关。 3. 套接字存在于通信区域中。   通信区域也叫地址族,它是一个抽象的概念,主要用于将通过套接字通信的进程的共有特性综合在一起。   为保证数据的正确性,在网络协议中需要制定网络字节顺序,采用统一的网络字节顺序。 网络通信三要素:   IP地址:用于表示主机(IP地址 = 网络ID+主机ID)   端口号:用于标识进程的逻辑端口   传输协议:TCP UDP 网络通信过程就是一个不断封装和解析的过程 Socket是连接应用程序与网络驱动程序的桥梁,Socket在应用程序中创建,通过绑定操作与驱动程序建立关系。 套接字   套接字是为特定网络协议(例如TCP/IP,ICMP/IP

TCP与UDP区别

帅比萌擦擦* 提交于 2020-03-06 12:52:15
TCP 为了方便开发网络应用程序,美国伯克利大学在Unix上实现的一种 应用程序 访问网络的通信协议Socket,Socket的出现使程序员可以很方便的访问TCP/IP; 使用TCP/IP 的套接字( Socket )进行通信: 服务器程序 将一个套接字绑定到一个特定的端口,并 通过此套接字等待和监听客户端到端口的连接请求; 客户端程序 根据服务器程序所在的主机名和端口 发出连接请求 。 以客户端向服务器端发送 11.jpg(下图) 为例: 客户端: import java.io.FileInputStream; import java.io.OutputStream; import java.net.Socket; public class Client { public static void main(String[] args) { try { //建立链接:指定server所在主机地址和对应的端口(绑定过程) Socket socket = new Socket("127.0.0.1", 9999); //使用IO技术将图片发送 OutputStream outputStream = socket.getOutputStream(); FileInputStream fileInputStream = new FileInputStream("D:\\11.jpg");

网络通信中tcp多客户端连接

痴心易碎 提交于 2020-03-06 04:39:59
  网络编程中的tcp实例太多了,自己也写了好几次(羞愧),今天在想一对一的TCP知道怎么写了,可是一对多的怎么办呢?服务器是如何知道要给那个发送数据呢?做开发的同学应该经常听说uid这个属性。可以为什么通过UID就知道要发送的数据是给正确的用户的呢?   不怎么忙的时候。仔细的了解了一下TCP的几个API和其中的参数。下面来看一下这几个API和参数: 描述:当创建socket套接字后,该套接字并没有鱼本机地址和端口等信息相连接,而bind函数将完成这些工作 包含的头文件 <sys/types.h> <sys/socket.h> 原型:int bind(int sockfd, const struct sockaddr *my_addr, socklen_t addrlen); 返回值: 0:成功 1:失败 返回的错误码 EACCES:地址受到保护,用户非超级用户。 EADDRINUSE:指定的地址已经在使用。 EBADF:sockfd参数为非法的文件描述符。 EINVAL:socket已经和地址绑定。 ENOTSOCK:参数sockfd为文件描述符 描述:listen函数使用主动连接套接口变为被连接套接口,是的一个进程能够接受其他请求,使之成为一个服务器进程。总之TCP服务器中LISTEN函数将进程变为一个服务器进程,将主动变成了被动 包含头文件 #include<sys

网络的一些基本函数

你。 提交于 2020-03-06 04:33:59
WSA是windows socket API简称 1 在delphi用这些API时,应先先明 WSAStartup();//初始 WSACleanup;//注销 后面介绍一些简单函数的使用 我也是学了再写,说错的地方指明,这既是自己的笔记 也是大家的参考 2、socket函数 用于生成socket(soket Descriptor) [声明] SOCKET socket(int af,int type,int protocol); [参数] af - 地址家族(通常使用:AF_INET) type - socket的种类 SOCK_STREAM : 用于TCP协议 SOCK_DGRAM : 用于UDP协议 protocol - 所使用的协议 [返回值] 当函数成功调用时返回一个新的SOCKET(Socket Descriptor) 失败时返回INVALID_SOCKET. 3、inet_addr函数 把好象"xxx.xxx.xxx.xxx"的10进制的IP地址转换为32位整数表示方法 [声明] unsigned long inet_addr ( const char FAR *cp ); [参数] cp - 指向用"xxx.xxx.xxx.xxx"的10进制来表示的IP地址字符串的指针 [返回值] 当函数成功调用时返回用32位整数表示的IP地址(按网络字节排列顺序)