网络编程

java学习(网络编程)

若如初见. 提交于 2019-12-14 21:45:43
1.网络编程入门 1.1 网络编程概述【理解】 计算机网络 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统 网络编程 在网络通信协议下,实现网络互连的不同计算机上运行的程序间可以进行数据交换 1.2 网络编程三要素【理解】 IP地址 要想让网络中的计算机能够互相通信,必须为每台计算机指定一个标识号,通过这个标识号来指定要接收数据的计算机和识别发送的计算机,而IP地址就是这个标识号。也就是设备的标识 端口 网络的通信,本质上是两个应用程序的通信。每台计算机都有很多的应用程序,那么在网络通信时,如何区分这些应用程序呢?如果说IP地址可以唯一标识网络中的设备,那么端口号就可以唯一标识设备中的应用程序了。也就是应用程序的标识 协议 通过计算机网络可以使多台计算机实现连接,位于同一个网络中的计算机在进行连接和通信时需要遵守一定的规则,这就好比在道路中行驶的汽车一定要遵守交通规则一样。在计算机网络中,这些连接和通信的规则被称为网络通信协议,它对数据的传输格式、传输速率、传输步骤等做了统一规定,通信双方必须同时遵守才能完成数据交换。常见的协议有UDP协议和TCP协议 1.3 IP地址【理解】 IP地址:是网络中设备的唯一标识 IP地址分为两大类 IPv4

Windows网络编程——Winsock实现UDP通信

喜欢而已 提交于 2019-12-14 12:54:07
在文章 Windows网络编程:一文深入理解Winsock 里Jungle详细介绍了Winsock的头文件、面向连接的通信(TCP/IP)和无连接的通信(UDP/IP), Windows网络编程:Winsock实现客户端与服务器文件传输(TCP/IP) 中Jungle基于Winsock实现了面向连接的通信,即利用TCP/IP协议通信。本文,Jungle将展示利用UDP/IP实现发送端与接收端的通信。 1.接收端 具体步骤和概念在此不再赘述,见 Windows网络编程:一文深入理解Winsock 。 #include <stdio.h> #include <stdlib.h> #include <WinSock2.h> #pragma comment ( lib,"WS2_32.lib" ) #define RECEIVER_ADDRESS "127.0.0.1" #define PORT 8000 void transAddrToBuf(SOCKADDR_IN sockAddr, char* buffer) { if (!buffer){ return; } sprintf(buffer, "%s:%d", inet_ntoa(sockAddr.sin_addr), ntohs(sockAddr.sin_port)); } int main() { WSAData wasData;

网络编程

送分小仙女□ 提交于 2019-12-14 01:11:37
因需要做一个监测TCP数据内容的小插件,学习了局域网内部的封装好的传输软件Socket: 一、Socket的简介如下: 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。 建立网络通信连接至少要一对端口号(socket)。 socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员 做网络开发所用的接口,这就是Socket编程接口; HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机, 提供了网络通信的能力。 二、Socket的操作流程如下: 如上图所示:TCP客户端和TCP服务器端都需要进行上述的步骤 TCP服务端的配置步骤: Step1: 建立Socket对象 Sk = socket.socket() Step2: 把一个地址族中的特定地址赋给socket Sk.bind((host,port)) Step3: 开启监听进程等待客户端链接服务端 Sk.listen(1) Step4: 接受客户端的申请,获取客户端的IP地址及其端口PORT clnt, addr = Sk.accept() Step5: 建立好连接之后,等待接受客户端的数据 data = clnt.recv(1024) Step6: 应答客户机的请求,将对应的数据发回去 clnt.sendall(data) Step7:

网络编程12 select多路复用

最后都变了- 提交于 2019-12-12 12:37:14
int select ( int maxfd , fd_set * readset , fd_set * writeset , fd_set * exceptset , const struct timeval * timeout ) ; 返回:若有就绪描述符则为其数目,若超时则为 0 ,若出错则为 - 1 maxfd 表示的是待测试的描述符基数,它的值是待测试的最大描述符加 1。 void FD_ZERO ( fd_set * fdset ) ;        void FD_SET ( int fd , fd_set * fdset ) ;    void FD_CLR ( int fd , fd_set * fdset ) ;     int FD_ISSET ( int fd , fd_set * fdset ) ; struct timeval { long tv_sec ; /* seconds */ long tv_usec ; /* microseconds */ } ; 1、将timeval置为空,表示如果没有IO事件发生就将一直等待下去 2、表示一段固定的时间后,select从阻塞调用中返回 3、将tv_sec和tv_usec都置为0,表示不等待,立即返回 来源: CSDN 作者: track_down 链接: https://blog.csdn.net/qq

20.1 网络编程

自古美人都是妖i 提交于 2019-12-12 11:49:23
网络编程概述 计算机网络 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系 统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统 网络编程 在网络通信协议下,实现网络互连的不同计算机上运行的程序间可以进行数据交换 网络编程三要素 IP地址 要想让网络中的计算机能够互相通信,必须为每台计算机指定一个标识号,通过这个标识号来指定要接收数 据的计算机和识别发送的计算机,而IP地址就是这个标识号。也就是设备的标识 端口 网络的通信,本质上是两个应用程序的通信。每台计算机都有很多的应用程序,那么端口号就可以唯一标识设备中的应用程序 了。也就是应用程序的标识 协议 通过计算机网络可以使多台计算机实现连接,位于同一个网络中的计算机在进行连接和通信时需要遵守一定 的规则,在计算机网络中,这些连接和通信的规则 被称为网络通信协议,它对数据的传输格式、传输速率、传输步骤等做了统一规定,通信双方必须同时遵守 才能完成数据交换。常见的协议有UDP协议和TCP协议 IP地址 IP地址分为两大类 IPv4: 是给每个连接在网络上的主机分配一个32bit地址。按照TCP/IP规定,IP地址用二进制来表示,每 个IP地址长32bit,也就是4个字节。例如一个采用二进制形式的IP地址是“11000000 10101000 00000001

⟅UNIX网络编程⟆⦔connect函数

て烟熏妆下的殇ゞ 提交于 2019-12-11 02:24:36
目录 说在前面 数据类型说明 基本说明 定义 说明 查看返回错误 说在前面 环境: ubuntu16.04 参考: UNIX网络编程、 linux manual page 数据类型说明 数据类型 说明 头文件 socklen_t 套接字地址结构的长度,一般为uint32_t <sys/socket.h> 基本说明 TCP客户用connect函数来建立与TCP服务器的连接。 定义 # include <sys/socket.h> int connect ( int sockfd , const struct sockaddr * servvaddr , socklen_t addrlen ) ; 参数说明: sockfd 套接字描述符 servaddr 指向套接字地址结构的指针 addrlen 套接字地址结构的长度 注意 : connect返回失败则该套接字不再可用,必须关闭,我们不能对这样的套接字再次调用connect函数。若再失败后想要重新连接,需要重新调用 socket函数 。 说明 客户(端)在调用函数connect前不必非得调用 bind函数 ;若调用bind,则会确定发送的IP数据报的源IP地址,并选择一个临时端口作为源端口(不一定要内核选择临时端口,bind可以指定端口,见 bind函数 ) 在TCP套接字前提下,调用connect函数将激发TCP三路握手

七、TCP C/S:socket 读写超时设置

a 夏天 提交于 2019-12-10 16:59:40
socket 的读写超时时间超过十分钟,数据包会重传16次。参考: http://my.oschina.net/lowkey2046/blog/694229 我们可以通过设置 socket 选项 SO_SNDTIMEO 和 SO_RCVTIMEO 来减少读写 socket 的等待时间。 1. 程序源码 在源码 http://my.oschina.net/lowkey2046/blog/693852 基础上进行修改。 在创建 socket 后,通过 setsockopt 函数修改读写超时时间即可。测试时只修改客户端 socket 的超时。 client int main(int argc, char **argv) { struct timeval tv; /* * 省略 */ if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { perror("socket"); exit(EXIT_FAILURE); } /* 设置套接字读写超时 */ tv.tv_sec = 3; tv.tv_usec = 0; setsockopt(sockfd, SOL_SOCKET, SO_SNDTIMEO, &tv, sizeof(tv)); setsockopt(sockfd, SOL_SOCKET, SO_RCVTIMEO, &tv,

Java socket网络编程

别说谁变了你拦得住时间么 提交于 2019-12-10 14:57:17
1,网络基础和软件编程 软件编写人员不需要了解太多的网络知识(基础还是需要的);软件编写人员主要抓住几点就可以做网络编程; 1,信息传输都是0和1的传输; 2,信息传输需要遵照网络协议;(底存的网络协议 和传输格式协议) 3,抓住传输协议的要点(如 协议的用途 简要协议实现方式) 4,IO 注:有很软件编程人员通常都不知道什么是协议,抓不到协议重点;有些时候在对接的时候问他们使用的什么协议,统一回复tcp/ip协议;这让我很是蛋疼; 补充:OSI(Open System Interconnection)开放式互联协议模型 分为7层:1.物理层 2.数据链路层 3.网络层 4.传输层 5.会话层 6.表示层 7.应用层 TCP/IP协议模型: 分为4层: 1.网络接口层,2.互联网层 3.传输层 4.应用层 协议都是分层的,我们常用的都是应用层协议;如htpp协议; 什么是协议?协议规定了我们在网络传输中的格式样板; 2,Java网络编程Socket 1 ,什么是 Socket 网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个 Socket 。 Socket 通常用来实现客户方和服务方的连接。 Socket 是 TCP/IP 协议的一个十分流行的编程界面,一个 Socket 由一个 IP 地址和一个端口号唯一确定。 但是, Socket

libcoro:在c++中支持coroutine

吃可爱长大的小学妹 提交于 2019-12-10 14:52:47
起因 在第一个版本的 libtnet 开发完成之后,我一直在思考如何让异步方式的网络编程更加简单。 虽然 libtnet 通过c++ shared_ptr以及function等技术很大程度上面解决了异步代码编写的一些问题,但是仍然会出现代码逻辑被强制拆分的情况。而这个则是项目中童鞋无法很好的使用其进行开发的原因。 所以我考虑让 libtnet 支持coroutine。 Coroutine 第一次接触coroutine的概念是在lua里面,记得当时想了很久才算弄明白了coroutine的使用以及原理。在lua中,coroutine的使用如下: co = coroutine.create(function () print("begin yield") coroutine.yield() print("after yield") end) coroutine.resume(co) print("after resume") coroutine.resume(co) 我们可以通过resume执行一个新创建或者已经被挂起的coroutine,通过yield挂起当前的coroutine,这样就可以实现类似多线程方式下面的多任务调度。 至于coroutine的原理,很多地方都有说明,主要就在于每个coroutine都有自己的堆栈,这样当coroutine挂起的时候,它的当前执行状态会被完整保留

⟅UNIX网络编程⟆⦔listen函数

无人久伴 提交于 2019-12-10 12:57:11
目录 说在前面 基本说明 定义 具体细节 补充说明 说在前面 环境: ubuntu16.04 参考: UNIX网络编程、 linux manual page 基本说明 图一 listen函数由服务器调用,主要负责监听套接字的连接以及规定套接字连接队列的容量(见下面英文原文) listen for socket connections and limit the queue of incoming connections socket函数创建一个套接字时,该套接字被称为主动套接字,即一个将要调用connect函数的客户套接字。而listen函数将一个未连接的套接字转换为 被动套接字 ,指示 内核应接受指向该套接字的连接请求 。 listen函数同时规定指向该套接字的连接请求所形成的队列的容量(规定内核为相应套接字排队的最大连接个数),该容量由backlog参数指定。 定义 # include <sys/socket.h> int listen ( int sockfd , int backlog ) 参数说明: sockfd 套接字描述符。 backlog 内核为任意一个给定的监听套接字维护两个队列: 未完成连接队列 该队列中的连接均处于满足以下条件的状态:客户发送的SYN包已到达服务器,服务器正在等待完成对应的TCP三路握手。即 SYN_RCVD 状态