套接字

20165315 第九周学习总结

五迷三道 提交于 2020-02-05 16:18:10
20165315 第九周学习总结 本周学习中遇到的问题和解决过程 在运行教材上例子2时,无法获取IP地址为166.111.222.3的主机域名: 解决过程: 在网页上试着查找这个IP地址,发现网页一直无法加载,可能是这个IP地址已经失效 在运行教材上例子3时,运行Client只能获取如下结果: 解决过程: 一开始以为是未联网造成的,但是联网后发现仍是这个结果,仔细看书后发现,是要先运行Server,再运行Client,就可以正常运行了 在运行教材上例子5的代码时,只能发送信息,无法接收信息: 解决过程: 询问了同学,发现使用windows系统电脑的同学是可以出现正常结果的,可能是mac电脑的原因,我会继续查找原因 在运行教材上例子6的代码时,运行阻塞: 解决过程: 和之前的例子3类似,也是应先运行BroadCast类,再运行Receiver类 学习总结 第十三章 URL 类 URL类是java.net包中的一个重要的类,URL的实例封装着一个统一资源定位符,使用URL创建对象的应用程序称作客户端程序 一个URL对象通常包含最基本的三部分信息 协议 地址 资源 构造方法 public URL(String spec) throws MalformedURLException public URL(String protocol, String host,String file)

最简单的Tcp Udp的例子

岁酱吖の 提交于 2020-02-05 11:25:15
//1.WinSock包含2个主要的版本,即WinSock1和WinSock2.前者需要包含头文件WinSock.h和库文件wsock32.lib,后者需要包含头文件WinSock2.h和库文件ws2_32.lib用于提供对网络相关API的支持。 //2.WSAData结构体的定义 typedef struct WSAData { WORD wVersion; WORD wHighVersion; #ifdef _WIN64 unsigned short iMaxSockets; unsigned short iMaxUdpDg; char FAR * lpVendorInfo; char szDescription[WSADESCRIPTION_LEN+1]; char szSystemStatus[WSASYS_STATUS_LEN+1]; #else char szDescription[WSADESCRIPTION_LEN+1]; char szSystemStatus[WSASYS_STATUS_LEN+1]; unsigned short iMaxSockets; unsigned short iMaxUdpDg; char FAR * lpVendorInfo; #endif } WSADATA, FAR * LPWSADATA; //3.MAKEWORD()

UNP总结 Chapter 22~25 高级UDP套接字编程、高级SCTP 套接字编程、带外数据、信号驱动I/O

|▌冷眼眸甩不掉的悲伤 提交于 2020-02-05 10:54:25
一、高级UDP套接字编程 1.接收标志、目的IP地址和接口索引 作为recvmsg的一个例子,我们将要写一个名为recvfrom_flags的函数,它与recvfrom类似,但他还返回: 返回的msg_flags值 收到的数据报的目的地址(通过设置IP_RECVDSTADDR套接口选项) 接收数据报接口的索引(通过设置IP_RECIF套机口选项) 相关详细代码 见UNP P463 2.何时用UDP代替TCP 使用广播或者多播时候,因为UDP支持广播或多播 类似实时音频应用的程序应使用UDP 对于简单的请求-应答应用程序应使用UDP 对于海量数据传输(例如文件传输)不应该使用UDP 3.给UDP应用增加可靠性 如果我们想要在请求-应答式应用程序中使用UDP,那么我们必须对我们的客户增加两个特性: 超时和重传以处理丢失的数据报 序列号,这样客户可以验证一个应答是对应相应的请求的 这两个特性是多数使用简单的请求-应答范例的现有UDP应用程序的一部分:例如DNS解析器,SNMP代理,TFTP和RPC。 加入序列号比较简单。客户给每个请求附加一个序列号,并且服务器必须在应答中给客户返回这个号,这样可以让客户验证给定的应答是对应所发请求的应答。 老式的处理超时和重传的方法是发送一个请求后等待N秒。如果没有收到应答,则重传并再等待另外N秒。这种情况发生一定次数后放弃。这是一种线性重传定时器

socketopt 函数

我是研究僧i 提交于 2020-02-05 05:24:39
本文转载链接: https://www.cnblogs.com/Ansing/p/5915538.html 功能描述: 获取或者设置与某个套接字关联的选 项。选项可能存在于多层协议中,它们总会出现在最上面的套接字层。当操作套接字选项时,选项位 于的层和选项的名称必须给出。为了操作套接字层的选项,应该 将层的值指定为SOL_SOCKET。为了操作其它层的选项,控制选项的合适协议号必须 给出。例如,为了表示一个选项由TCP协议解析,层应该设定为协议 号TCP。 用法: #include <sys/types.h> #include <sys/socket.h> int getsockopt(int sock, int level, int optname, void *optval, socklen_t *optlen); int setsockopt(int sock, int level, int optname, const void *optval, socklen_t optlen); 参数: sock:将要被设置或者获取选项的套接字。 level:选项所在的协议层。 optname:需要访问的选项名。 optval:对于getsockopt(),指向返回选项值的缓冲。对于setsockopt(),指向包含新选项值的缓冲。 optlen:对于getsockopt()

python网络编程

谁说我不能喝 提交于 2020-02-03 15:17:27
一:进程间的通信   1.本地进程间的通信   消息传递(管道,FIFO,消息队列)   同步(互斥量,条件变量,读写锁,文件和写记录锁,信号量)   共享内存(匿名的和具名的) 远程过程调用      2.网络进程间的通信   网络上的进程对得唯一区分,这样才能进行网络间的通信,比如QQ,微信聊天等等。而可以唯一区分的是进程的ip地址(互联网协议地址),协议,端口(设备与外界通讯的出口)。Python进行网络编程,就是在Python程序本身这个进程内,连接别的服务器进程的通信端口进行通信。 二:软件开发的架构   1.B/S架构(浏览器端、服务器端)   2.C/S架构(客户端、服务器端)   2.1 socket套接字就是,应用程序通过套接字向网络发出请求或者应答网络请求,使主机间或者计算机间的程序可以相互通信。 应用层与 TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中, Socket其实就是一个门面模式,它把复杂的 TCP/IP协议族隐藏在 Socket接口后面,对用户来说,一组简单的接口就是全部,让 Socket去组织数据,以符合指定的协议。 所以,我们无需深入理解tcp/udp协议,socket已经为我们封装好了,我们只需要遵循socket的规定去编程,写出的程序自然就是遵循tcp/udp标准的。   2.2 socket()函数     socket

UNIX网络编程——getsockname和getpeername函数

丶灬走出姿态 提交于 2020-02-02 20:40:12
这两个函数或者返回与某个套接字关联的 本地协议地址 (getsockname),或者返回与某个套接字关联的 外地协议地址 即得到 对方的地址 (getpeername)。 #include <sys/socket.h> int getsockname(int sockfd,struct sockaddr* localaddr,socklen_t *addrlen); int getpeername(int sockfd,struct sockaddr* peeraddr,socklen_t *addrlen); 均返回:若成功则为0,失败则为-1 getpeername只有在连接建立以后才调用 ,否则不能正确获得对方地址和端口,所以它的参数描述字一般是 已连接描述字而非监听套接口描述字。 没有连接的UDP不能调用getpeername,但是可以调用getsockname和TCP一样,它的地址和端口不是在调用socket就指定了,而是在第一次调用sendto函数以后。 已经连接的UDP,在调用connect以后,这2个函数(getsockname,getpeername)都是可以用的。但是这时意义不大,因为已经连接(connect)的UDP已经知道对方的地址。 需要这两个函数的理由如下: 在一个没有调用bind的 TCP客户 上, connect成功返回后

Day04 (四)_TCP文件传输设计

一曲冷凌霜 提交于 2020-02-01 23:48:04
8.3 TCP文件传输 8.3.1 TCP服务器端设计 当服务器端发送文件给客户端时,要先选中一个文件,读取这个文件的大小与名称,以便于客户端可以提前准备好一个同名同大小的储存区域。 在客户端接收到文件的名字和大小后,要经过一段时间的延时,避免传输黏包问题导致的传输数据丢失,通常调用定时器进行延时,保证数据传输的完整性。 按照之前数据传输的TCP服务器设计,首先是需要俩个套接字,一个用于监听,另一个用于数据收发,此处类似,只是基于之前的操作进行扩充。 根据流程分析所需ui结构,首先是一个文件选择按钮,用于选择将要发送的文件,然后是文件发送按钮,用于文件发送。还有就是文本编辑区,用于显示客户端连接与文件发送情况。 连接操作: 在界面的初始界面文件选择按钮与文件发送按钮不可使能,当监听套接字监听到客户端的连接后,恢复文件选择按钮。此外,在监听到客户端连接成功之后,首先是通过监听套接字获取与客户端进行通信所使用的的通信套接字,获取客户端的IP和端口号,由于IP原本形式为 Q HostAddress ,所以使用toString()进行类型转换。然后使用Qstring进行数据组包,将要显示的数据进行字符串使用Qstring函数进行拼接,然后将拼接好的字符串在文本编辑区进行显示,具体代码: //如果客户端和服务器连接 //tcpserver自动触发,newconnection connect

从网络IO看高性能框架

China☆狼群 提交于 2020-02-01 18:52:46
前言: 我是一名golang后端开发工程师,不是Java,也不是拍黄片,对,就是那个号称原生支持高并发的“够浪!”。那为什么go能支持高并发?原生支持高并发又是何解?跟着我,一起探讨一下所谓的高并发是怎么回事… 阅读本文你将收获: 知道框架高性能的根本原因 了解进程,线程切换开销在哪里 熟悉阻塞与非阻塞IO,同步与异步调用的区别 大纲: 讨论一个高性能框架甚至语言的时候,我们在讨论什么? 三大网络模型 阻塞IO+多进程 阻塞IO+多线程 非阻塞IO+IO多路复用 五种网络IO简介 网络IO的本质 如何区分阻塞IO和非阻塞IO 如何区分同步和异步 个人整理的网络IO思维导图 1.讨论一个高性能框架甚至语言的时候,我们在讨论什么 我相信大家肯定听过什么阻塞/非阻塞IO,同步/异步调用,我也尝试过死记概念,结果大家应该都有体会,过一阵子就忘记了。知其然而不知其所以然~然并卵。 大家在选择一门语言或者一个框架的时候肯定优先看他的性能,也就是并发量,例如常用的测试手段,就是用该语言或者框架写个http server服务器,对于http请求返回一个“hello,world!”,利用wrk进行压测,看看每分钟请求量最高能到多少,在4核8G的Ubuntu服务器上跑该http服务,利用wrk压测,gin框架每分钟能处理的请求量接近300W!这是相当优秀的! 前一阵子在go meet

网络协议UDP

て烟熏妆下的殇ゞ 提交于 2020-02-01 08:47:59
------------------------------互联网协议与协议族------------------------------ tcp/ip协议介绍:计算机网络协议,不同类型不同厂家之间的终端进行沟通,规范协议 。 互联网协议族:为tcp/ip协议族 大概有上百种协议,其中tcp协议、ip协议使用的比较 多所以大家默认成为tcp/ip IP地址:网络地址(ip地址与子网掩码进行与运算获得)和主机地址 A类IP地址:由1字节的网络地址和3字节主机地址组成,网络地址的最高位必须是“0” (地址范围1.0.0.1-126.255.255.254) B类IP地址:由2个字节的网络地址和2个字节的主机地址组成,网络地址的最高位必须是 “10”(128.1.0.1-191.255.255.254) C类IP地址:由3字节的网络地址和1字节的主机地址组成,网络地址的最高位必须 是“110”(范围192.0.1.1-223.255.255.254) ------------------------------socket介绍------------------------------ #定义:socket(简称 套接字) 是进程间通信的一种方式,它与其他进程间通信的一个主 要不同是: #import socket:应用socket包 #socket.socket(Address

Java中bio编程

我与影子孤独终老i 提交于 2020-01-31 19:34:22
网络编程(Socket)概念 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个 socket。 建立网络通信连接至少要一个端口号。socket 本质是编程接口(API),对 TCP/IP 的封装, TCP/IP 也要提供可供程序员做网络开发所用的接口,这就是 Socket 编程接口;HTTP 是轿车, 提供了封装或者显示数据的具体形式;Socket 是发动机,提供了网络通信的能力。 Socket 连接步骤 根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三 个步骤:服务器监听,客户端请求,连接确认。【如果包含数据交互+断开连接,那么一共是 五个步骤】 (1)服务器监听:是服务器端套接字并不定位具体的客户端套接字,而是处于等待连 接的状态,实时监控网络状态。 (2)客户端请求:是指由客户端的套接字提出连接请求,要连接的目标是服务器端的 套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套 接字的地址和端口号,然后就向服务器端套接字提出连接请求。 (3)连接确认:是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求, 它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端, 一旦客户端确认了此描述,连接就建立好了。而服务器端套接字继续处于监听状态,继续接